博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListView的优化
阅读量:6473 次
发布时间:2019-06-23

本文共 1417 字,大约阅读时间需要 4 分钟。

1. ListView须要设置adapter,它的item是通过adapter的方法getView(int position, View convertView, ViewGroup parent)获得的。

2. ListView中仅仅有第一屏的item须要新建,它的引用会被存在RecycleBin对象内,在拖动时后面的item实际上是重从了之前创建的item。
3. 依据上述,ListView在须要显示item时,最開始第一屏时,getView(int position, View convertView, ViewGroup parent )的第二个參数为null,显示第二屏或者回滚显示第一屏时,getView(int position, View convertView, ViewGroup parent )第二个參数是一个原来缓存的item,我们仅仅须要在getView中把它内部数据更新就可以。
4. 假设item结构比較复杂,在更新一个已有的item内部数据的时候,查找item内部每个元素也须要占用不少资源,所以,能够把这些内部元素的引用缓存起来,直接对其赋值,最有效的方法是把这些引用存到相应的item中,比較好的方法是使用setTag()方法。
据上四条,可得出:
1. 在adapter的getView(int position, View convertView, ViewGroup parent)方法中,每次都new一个新的View返回,是性能最差的,浪费了ListView巧妙设计的一片苦心。
2. 假设item内部元素简单,getView中假设传进来的view不为空,直接为其赋值就可以。
3. 假设item内部元素复杂,能够使用Google IO 大会中讨论的方法优化(例如以下):
public View getView(int position, View convertView, ViewGroup parent) {
        
    ViewHolder holder;
    if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
            holder = new ViewHolder();
            holder.icon1 = (ImageView) convertView.findViewById(R.id.icon1);
            holder.text1 = (TextView) convertView.findViewById(R.id.text1);
            convertView.setTag(holder);
    }
    else{
            holder = (ViewHolder)convertView.getTag();
    }
        holder.icon1.setImageResource(R.drawable.icon);
        holder.text1.setText(mData[position]);
        return holder;
}
static class ViewHolder {
        TextView text1;
        ImageView icon1;
}
參考:http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
你可能感兴趣的文章
oracle11g dataguard 安装手册(转)
查看>>
java并发包分析之———Deque和LinkedBlockingDeque
查看>>
1. Two Sum - Easy - Leetcode解题报告
查看>>
SQLiteHelper
查看>>
多线程---同步函数的锁是this(转载)
查看>>
鱼C记事本V1.0(下)- 零基础入门学习Delphi28
查看>>
百练 2742 统计字符数 解题报告
查看>>
Ubuntu搜狗输入法候选词乱码
查看>>
js中回调函数写法
查看>>
React native android 最常见的10个问题
查看>>
数据结构和算法
查看>>
int a; int* a; int** a; int (*a)[]; int (*a)(int)
查看>>
.Net 项目代码风格要求
查看>>
java编码规范
查看>>
[pat]1045 Favorite Color Stripe
查看>>
Immutable学习及 React 中的实践
查看>>
【转】性能测试步骤
查看>>
OSI与TCP/IP各层的结构与功能,都有哪些协议
查看>>
Android实例-程序切换到后台及从后台切换到前台
查看>>
spring boot启动定时任务
查看>>