android listview优化及其解释


关于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();获得之前保存的元素结构,在其基础上面修改数据即可。。。。









你可能感兴趣的:(android,优化,ListView,Google,null)