关于ListView 自定义 Adapter的问题

简介:

上周碰到了一个问题,就是我自定义了一个View进行绘图,如果这个图多了以后,一个屏幕显示不下,于是我第一个想到的就是将这个View放在ScrollView中,可是如果放在ScrollView中的话,这个View就画不出来,于是上网查找这个问题,说是在View中添加一个下面的函数:

protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec){

          setMeasuredDimension(800,60);

      }

可是我添加了以后还是画不出来,于是只能换一个思路了。


因为我自定义的View是画一个窄长的矩形来展现Schedule的,于是我就在想用ListView来承载这30个矩形。

怎么将这些矩形放在ListView中的Item中呢?我试着尝试了addView这个方法,可是不管用。于是我就查找了一下资料,详细了解了一下关于ListView的原理。

列表的显示需要三个元素:

1.ListVeiw:  用来展示列表的View。

2.适配器 :用来把数据映射到ListView上

3.数据:    具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,这三种适配器的使用大家可学习下官网上面的使用或者自行百度谷歌,一堆DEMO!!!其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方便的把数据库的内容以列表的形式展示出来。

系统要绘制ListView了,他首先用getCount()函数得到要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(这个看实际情况,如果是一个简单的显示则是View,如果是一个自定义的里面包含很多控件的时候它其实是一个ViewGroup),然后再实例化并设置各个组件及其数据内容并显示它。好了,绘制完这一行了。那再绘制下一行,直到绘完为止,

但是这些还不能有效的解决我的问题,于是我又查找了资料,发现我需要自定义一个Adapter将自定义View加载到ListViw中。

而在所有代码都写好了以后,发现自定义View还是无法加载到ListView中,我试着将自定义View改为TextView,发现可以加载,Button也可以。最后我向组长进行了请教,他告诉我说要在自定义的Adapter中加入

protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec){

          setMeasuredDimension(800,60);

      }

我发现加入后,完美的解决了我的问题。


本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1217501,如需转载请自行联系原作者


相关文章
|
Java Android开发
Adroid RecyclerView adapter 封装
Adroid RecyclerView adapter 封装
|
Android开发
同一页面实现recycleView三种布局【recycleView + adapter】
同一页面实现recycleView三种布局【recycleView + adapter】
160 0
ListView Adapter.notifi不管用
前言,在使用到adapter的时候,一般要用List来装数据实体,这里两种不同的写法容易遇到不同的问题。 第一种写法 class TestAdapter{ private List list; *** public TestAdapter(List list){ this.
742 0
|
Android开发 数据格式 XML
|
缓存
ListView 的 Adapter 适配器模板
Adapter优化.png ListView中的Adapter优化的通用模板。 如果发现对ListView优化工作做完后,还会卡顿,可以检查notifyDataSetChanged()方法是否运用合理,频繁的调用此方法也会引发卡顿。
893 0
|
Android开发 索引 Java
android RecycleView Adapter简单封装
早些时候我们使用系统提供个的BaseAdapter的时候为了满足大家的需要,我们总会对BaseAdapter做一层上层的封装,然后对于实际业务我们只需要关心getView里面的View即可,是代码可读性和可维护性更高,特别是在多View的界面,这个优势就体现出来了,自从Android 5.0后系统提供的,先不说效率如何,这个既然是Google为我们提供的,我们姑且用之,不过说实话,对于它的写法
1325 0