listview实现漂亮的自定义表格实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

竭诚为您提供优质文档/双击可除listview实现漂亮的自定义表格实例

篇一:android学习笔记二十四之listView列表视图二

android学习笔记二十四之listView列

表视图二

前面一篇我们介绍了常用的几种适配器的简单实现和listView的简单使用,这一篇中,我们介绍一下listView

的优化和一些其它的问题。

listView优化方法一

在listView中,我们最常用的就是自定义adapter,在我们自定义adapter中,需要实现两个比较重要的方法getcount()和getView(),前者是负责计算listView的

总item数,后者是生成item,有多少个item就会调用getView()方法多少次。getView()方法每次调用的时候都会重新inflate一个View出来返回去,但是对于listView,只需要保留能够显示的最大的View的数目即可,而新的View 可以复用消失的View。listView给我们提供了可复用的View

对象,在getView()方法里面,有一个参数View,这个就是可以复用的View对象。当参数View为null的时候,我们需要inflate一个View,当它不为null的时候,我们可以直接将他返回。例如:

@override

publicViewgetView(inti,Viewview,Viewgroupviewgroup) {

Viewholderviewholder;

//view为空的时候,inflate一个新的view

if(view==null){

view=layoutinflater.from(context).inflate(yout. item_base_adapter,null);viewholder=newViewholder();

_base_adapter=(textView)view.findViewb yid(_base_adapter);view.settag(viewholder);

}else{

viewholder=(Viewholder)view.gettag();

}

_base_adapter.settext(datas[i]);

//不为空,复用view

returnview;

}

listView优化方法二

上面介绍的是对View复用的优化,这样我们可以不必每一item都inflate一个新的view,可以通过复用,减小内存开销。下面我们介绍一个每一个androidapp中都必不可少的操作,获取控件句柄,简单的说就是拿到id。在listView中,我们inflate一个View,里面也有需要获取到组件id的,我们可以用Viewholder来实现优化:具体的思路就是,我们在Viewholder中存放我们需要的控件,在View为null的时候,需要inflate一个新的view,同时我们还new一个Viewholder类的对象,并将findviewbyid的结果赋值给Viewholder中对应的成员变量,我们可以调用View中settag()方法,将

Viewholder和View绑定起来。当view不为null的时候,通过gettag()方法取出Viewholder对象,这样就可以获得Viewholder中的成员变量,也不再需要调用findViewbyid方法了。例如:

@override

publicViewgetView(inti,Viewview,Viewgroupviewgroup) {

Viewholderviewholder;

if(view==null){

view=layoutinflater.from(context).inflate(yout. item_base_adapter,null);//view为空,new一个Viewholder对象

viewholder=newViewholder();

//获取到Viewholder对象中成员变量的id

_base_adapter=(textView)view.findViewb yid(_base_adapter);//调用settag方法,将Viewholder绑定到中

view.settag(viewholder);

}else{

//view不为空,调用gettag方法,取出保存的Viewholder对象

viewholder=(Viewholder)view.gettag();

}

_base_adapter.settext(datas[i]);

returnview;

}

staticclassViewholder{

textViewtv_base_adapter;

}

listView优化方法三

上面介绍了两种listView的优化方法,第二种优化效率根据google官方文档的解析,可以优化5%左右的效率。下面介绍一下第三种优化方法。

在我们实际开发中,listView显示的数据都是在网络中加载,假如网络比较好,能一次将所有的数据加载出来,这样用户体验还好,如果网络不好,那么加载数据需要时间比较久,用户体验就不好。另外,我们知道,虚拟机为每一个进程分配的内存是有限的,如果一下加载太多的数据就会出现内存溢出的情况。为了解决这两个问题,我们可以用分批加载的方法,但是分批加载还是不能完全解决问题。假如我有10万条数据需要加载,分批加载任然可能会出现oom问题,这时,我们需要将数据分页加载,先分页加载,然后在分批加载,这样用户体验会好一些。

listView出现的一些问题和解决

listView焦点问题

在一些情况中,我们需要在listView的item中添加button、edittext、checkbox等控件,这就涉及到了焦点获取的问题。我们在listView的item中添加了button按钮,点击发现,我们不能触发onitemclick和onitemlongclick

相关文档
最新文档