Android之ListView的优化
2014-04-28 16:44
274 查看
ListView是Android的一个常用的控件,用俩显示多行数据,
最基本的用法就是,得到了ListVIew对象后,用setAdapte()方法去给ListView填充数据.
Adapter有很多,有ArrayAdapter 只能显示一行TextView .,SImpleAdapter有很好的拓展性,大部分的情况下都是继承SimpleAdapter来拓展ListView的内容.
SimpleCursorAdapter就类似SImpleAdapter和数据库的结合.
当系统需要绘制ListView的时候,会首先调用Adapter中的getCount()方法来得到列表的长度,然后开始绘制第一行,绘制的时候调用getView()方法来取得需要显示的View,
绘完到屏幕可见的item的之后,把其他的就存放在Recyled里,把可以显示的才存放在内存里.
当一个item因为滑动变成不可见时,这个item会作为会作为一个参数传递给getView(),作为一个新的可见的convertView而循环使用
1.首先判断这个convertView是不是为null,如果为null的话用LayoutInflater去加载一个,
2.convertView的目的在于循环使用,避免每次都要去加载一个layout. 节省内存.
3.使用ViewHolder是保证不用每次都要findViewById()来获得控件的对象.
4.使用一个静态的ViewHolder是Java的编程规范,
5.VIew.setTag()方法可以把View保存起来,以后用getTag()方法多次使用
最基本的用法就是,得到了ListVIew对象后,用setAdapte()方法去给ListView填充数据.
Adapter有很多,有ArrayAdapter 只能显示一行TextView .,SImpleAdapter有很好的拓展性,大部分的情况下都是继承SimpleAdapter来拓展ListView的内容.
SimpleCursorAdapter就类似SImpleAdapter和数据库的结合.
当系统需要绘制ListView的时候,会首先调用Adapter中的getCount()方法来得到列表的长度,然后开始绘制第一行,绘制的时候调用getView()方法来取得需要显示的View,
绘完到屏幕可见的item的之后,把其他的就存放在Recyled里,把可以显示的才存放在内存里.
当一个item因为滑动变成不可见时,这个item会作为会作为一个参数传递给getView(),作为一个新的可见的convertView而循环使用
class MyAdapter extends SimpleAdapter{ public View getView(int position,View convertView,ViewGroup parent) { View view=convertView; ViewHolder holder; if(view==null){ view=LayoutInflater.from(context).inflate(R.layout.section_list_item1,null); holder=new ViewHolder(); holder.tv_name=(TextView)view.findViewById(R.id.contact_contactinfoitem_tv_name); holder.tv_phone=(TextView)view.findViewById(R.id.contact_contactinfoitem_tv_phoneNum); view.setTag(holder); }else{ holder=(ViewHolder)view.getTag(); } ContactInfo info=contacts.get(position); if(info!=null){ holder.tv_name.setText(info.getContactName()); holder.tv_phone.setText(info.getContact_Phone()); } return view; } public int getCount(){ return 0; } static class ViewHolder { TextView tv_name,tv_phone; } }
1.首先判断这个convertView是不是为null,如果为null的话用LayoutInflater去加载一个,
2.convertView的目的在于循环使用,避免每次都要去加载一个layout. 节省内存.
3.使用ViewHolder是保证不用每次都要findViewById()来获得控件的对象.
4.使用一个静态的ViewHolder是Java的编程规范,
5.VIew.setTag()方法可以把View保存起来,以后用getTag()方法多次使用
相关文章推荐
- [Android]ListView的Adapter.getView()方法中延迟加载图片的优化
- android listview优化
- Android中ListView的优化
- Android中对ListView的展示的性能优化常见的两种方案
- android45——listView的几种优化
- Android实习03:ListView网络异步加载图片的优化显示(1)
- android问题及其解决-优化listView卡顿和如何禁用ListView的fling
- Android的ListView常用优化技巧
- Android ListView异步加载图片优化
- Android中ListView的优化
- Android之ListView原理学习与优化总结
- android基础笔记——使用viewholder模式优化ListView
- SimpleAdapter,Android ListView使用BaseAdapter与ListView的优化,SQL命令
- Android性能优化之提高ListView性能的技巧
- Android listview的实现及优化
- android之listview缓存图片(缓存优化)
- Android - ViewHolder优化ListView
- Android 复杂布局的ListView优化思路
- 基于Android官方AsyncListUtil优化经典ListView分页加载机制(二)
- Android之ListView原理学习与优化总结