热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

僵硬的ListView

不可以滚动的ListView,解决在ScrollView中需要使用Listview的问题标签:Android[1].[文件] RigidList


不可以滚动的ListView,解决在ScrollView中需要使用Listview的问题




标签:
Android



[1].[文件] RigidListView.java ~ 4KB    下载(10) 跳至 [1]





?










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56


57


58


59


60


61


62


63


64


65


66


67


68


69


70


71


72


73


74


75


76


77


78


79


80


81


82


83


84


85


86


87


88


89


90


91


92


93


94


95


96


97


98


99


100


101


102


103


104


105


106


107


108


109


110


111


112


113


114


115


116


117


118


119


120


121


122


123


124


125


126


127


128


129


130


131


132


133


134


135


136


137


138


139


140


141


142


143


144


145


146


147


148


149


150


151


152


153


154


155


156


157


158


159


160


161


162


163


164


165


166


167


168


169


170


171


172


173


174


175


176


177


178




package

com.phodev.andtools.widget;


 


import

android.content.Context;


import

android.content.res.Resources.NotFoundException;


import

android.database.DataSetObserver;


import

android.graphics.drawable.Drawable;


import

android.util.AttributeSet;


import

android.view.View;


import

android.view.View.OnClickListener;


import

android.widget.BaseAdapter;


import

android.widget.ImageView;


import

android.widget.LinearLayout;


import

android.widget.ListAdapter;


 


/**


 *
LinearLayout模仿ListView,解决ListView在ScrollView中的不兼容问题


 *


 *
@author skg


 *


 */


public

class

RigidListView
extends

LinearLayout
implements

OnClickListener {


 


    private

BaseAdapter mAdapter;


    private

OnItemClickListener onItemClickListener;


    private

Drawable dividerDrawable;


    private

int

dividerResId = android.R.drawable.divider_horizontal_dim_dark;


    private

int

itemSelectorDrawableResId = android.R.drawable.list_selector_background;


 


    /**


     *
绑定布局


     */


    private

void

bindLinearLayout() {


        removeAllChild();


        int

count = mAdapter.getCount();


        for

(
int

i =
0;
i


            View
v = mAdapter.getView(i,
null,
null);


            v.setLayoutParams(new

LayoutParams(LayoutParams.FILL_PARENT,


                    LayoutParams.FILL_PARENT));


            //


            LinearLayout
itemCOntainer=
new

LinearLayout(getContext());


            itemContainer.setLayoutParams(new

LayoutParams(


                    LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));


            //
添加Item的View


            itemContainer.addView(v);


            //
设置Divider


            itemContainer.setBackgroundResource(itemSelectorDrawableResId);


 


            itemContainer.setOrientation(LinearLayout.VERTICAL);


            itemContainer.setId(i);


 


            itemContainer.setClickable(true);


            if

(onItemClickListener !=
null)
{


                itemContainer.setOnClickListener(this);


            }


 


            itemContainer.setFocusable(true);


 


            Drawable
divider = getDivider();


            if

(divider !=
null)
{


                ImageView
line =
new

ImageView(getContext());


                line.setBackgroundDrawable(dividerDrawable);


                itemContainer.addView(line);


            }


 


            addView(itemContainer,
i);


        }


    }


 


    public

RigidListView(Context context) {


        super(context);


        init(context);


    }


 


    public

RigidListView(Context context, AttributeSet attrs) {


        super(context,
attrs);


        init(context);


    }


 


    private

void

init(Context context) {


        this.setOrientation(LinearLayout.VERTICAL);


    }


 


    /**


     *
不设置的话使用默认的,0表示不使用任何Divider


     *


     *
@param resId


     */


    public

void

setDivider(
int

resId) {


        dividerResId
= resId;


    }


 


    public

void

setItemSelector(
int

resId) {


        itemSelectorDrawableResId
= resId;


    }


 


    private

Drawable getDivider() {


        if

(dividerDrawable ==
null

&& dividerResId !=
0)
{


            try

{


                dividerDrawable
= getContext().getResources().getDrawable(


                        dividerResId);


            }
catch

(NotFoundException e) {


                e.printStackTrace();


            }


        }


        return

dividerDrawable;


    }


 


    /**


     *
获取Adapter


     *


     *
@return adapter


     */


    public

ListAdapter getAdpater() {


        return

mAdapter;


    }


 


    /**


     *
设置数据


     *


     *
@param adpater


     */


    public

void

setAdapter(BaseAdapter adpater) {


        mAdapter
= adpater;


        mAdapter.registerDataSetObserver(dataSetObserver);


        bindLinearLayout();


    }


 


    /**


     *
设置点击事件,OnItemClickListener不同于ListView的监听,这个监听必须在setAdapter之前才有效


     *


     *
@param onItemClickListener


     */


    public

void

setOnItemClickListener(OnItemClickListener onItemClickListener) {


        this.onItemClickListener
= onItemClickListener;


    }


 


    public

interface

OnItemClickListener {


        public

void

onItemClick(View view, ListAdapter adpater,
int

position);


    }


 


    @Override


    public

void

onClick(View v) {


        if

(onItemClickListener !=
null)
{


            onItemClickListener.onItemClick(v,
mAdapter, v.getId());


        }


    }


 


    private

DataSetObserver dataSetObserver =
new

RigidDataSetObserver();


 


    public

class

RigidDataSetObserver
extends

DataSetObserver {


 


        @Override


        public

void

onChanged() {


            refreshUI();


        }


 


        @Override


        public

void

onInvalidated() {


            refreshUI();


        }


 


    }


 


    /**


     *
刷新UI


     */


    private

void

refreshUI() {


        bindLinearLayout();


 


    }


 


    private

void

removeAllChild() {


        if

(
this.getChildCount()
>
0)
{


            removeAllViews();


 


        }


    }


}






推荐阅读
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • JavaScript 中创建对象的多种方式
    本文介绍了 JavaScript 中创建对象的几种常见方法,包括字面量形式、构造函数、原型对象等。每种方法都有其特点和适用场景,通过对比分析,帮助开发者选择最适合的方式。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
author-avatar
多米音乐_34396075
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有