您的位置:首页 > 移动开发 > Android开发

android listview优化及其解释

2012-07-09 21:58 288 查看
关于listview的数据适配器,adapter是继承与BASEADAPTER,这个重写getView的方法来进行获得每一个界面元素的显示:

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

tmp1 = System.currentTimeMillis();

MyView view;

if( convertView == null )

{

//只有当可视化范围才会进行加载,其他的时候不会进行加载数据

//也就是说ListView仅仅缓存了可视范围内的View,随后的滚动都是对这些View进行数据更新

convertView = LayoutInflater.from(context).inflate(R.layout.listview1, null);

view = new MyView();

view.img1 = (ImageView)convertView.findViewById(R.id.img1);

view.img2 = (ImageView)convertView.findViewById(R.id.img2);

view.text1 = (TextView)convertView.findViewById(R.id.text1);

view.text2 = (TextView)convertView.findViewById(R.id.text2);

convertView.setTag(view);

System.out.print("YES.position=" + position);

}

else

{

//调用的其实是已经保存了的可视范围内的view的结果,

System.out.print("NO.position=" + position);

// return convertView;

view = (MyView) convertView.getTag();

}

view.img1.setImageResource(R.drawable.ic_launcher);

view.img2.setImageResource(R.drawable.ic_launcher);

view.text1.setText(" 1-"+position+" ");

view.text2.setText(" 2-"+position+" ");

tmp2 = System.currentTimeMillis();

System.out.println("|time:"+ (tmp2-tmp1));

return convertView;

}

理解:在google I/O大会上面强调应该使用这个方式来继续listview的建立,这个listview不管有多少的数据量,都仅仅实际调用findViewById()显示界面视图的个数,而当通过滑动LISTVIEW的其他的数据时候,而是使用之前已经加载的VIEW结构,只是修改其中的数据而已。。。。这样就做到了listview的优化。。。。

convertView.setTag(view);用于保存界面元素结构

view = (MyView) convertView.getTag();获得之前保存的元素结构,在其基础上面修改数据即可。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: