listview实现漂亮的自定义表格实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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