本文主要介绍android平台listview的优化方法。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。
这个东西是安卓必备的,我相信你也会,但是写下来的目的是为了记录。
这个东西很多面试都会被问到,那我们该怎么回答呢?
首先,我认为有以下几点:
1.定义listview的时候最好固定宽度和高度,这样可以减少listview的测量次数,避免每次加载的时候都要进行测量。
2.分页加载,也是优化之一,优化内存,有体验感。有兴趣可以试试大数据加载;
3.convertView是布局的复用;
4.使用ViewHolder的目的是减少findviewByID的数量;
下面的代码验证3和4。
公共视图getView(int position,View convertView,ViewGroup parent) {
Log.e('========',' getView - position '位置);
convert view=layoutinflater . from(m context)。inflate(R.layout.item_list,null);
返回convertView
}
也就是说,你这样写的话,每次都会填写版面(滑动一下就会发现每次都会打印日志),找到对应的版面。如果每次都填,肯定会浪费资源,所以我们这样写。
公共视图getView(int position,View convertView,ViewGroup parent) {
if (convertView==null) {
convert view=layoutinflater . from(m context)。inflate(R.layout.item_list,null);
Log.e('========',' getView - position '位置);
}否则{
}
返回convertView
}
你会看到日志永远是这些数据(如果你的页面显示的是5,这里的数据应该是6,会比显示的数据多1)。
取景器
如果不使用viewHolder,这是代码。
公共视图getView(int position,View convertView,ViewGroup parent) {
if (convertView==null) {
convert view=layoutinflater . from(m context)。inflate(R.layout.item_list,null);
}
TextView TextView=convert view . findviewbyid(r . id . TV);
textview . settext(marray list . get(position));
返回convertView
}
显然,这段代码必须是findViewById每个textview你可能会说,你可以在if判断中找到值,然后在if之外赋值。你可以尝试一些你会觉得有趣的事情。上下滑动几次,你会发现数据会比较混乱,会有很多重复的数据。这显然不符合我们的要求;
公共视图getView(int position,View convertView,ViewGroup parent) {
ViewHolder viewHolder
if (convertView==null) {
convert view=layoutinflater . from(m context)。inflate(R.layout.item_list,null);
view holder=new view holder();
view holder . mtextview=convert view . findviewbyid(r . id . TV);
convert view . settag(view holder);
}否则{
view holder=(view holder)convert view . gettag();
}
view holder . mtextview . settext(marray list . get(position));
返回convertView
}
公共静态类视图容器{
私有TextView mTextView
}
这基本符合我们的要求,数据不会混乱,布局会重用,findViewById次数会减少,从而大大减少内存的使用。其实这样就有问题了。如果listview项中有图片快速滑动,就会发现错位问题。当然,这些问题一般都可以通过第三方加载框架来解决。Listview item最小化了布局的嵌套,很容易加载大图片。Listview优化就是这样。如果有其他更好的优化方法,请留言。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。