基于“ViewHolder”技术提升Android ListView中Item View加载效率
来源:互联网 发布:java获取当年的第一天 编辑:程序博客网 时间:2024/05/01 21:39
对于提升Android中频繁使用的ListView子Item View的加载效率,基于两点基本考虑:
1,Android的View的创建比较消耗资源;
2,findViewById()也不是最快的。
所以在实际开发中经常使用的适配器中的getView()方法:
public View getView(int position, View convertView, ViewGroup parent);
如果每次都在里面创建一个新View出来,将导致效率低下,比较高效率的做法是每次判断convertView是否为空,若不为空,则直接使用convertView的findViewById()把子View重建出来即可。
但是,这种做法虽然提升了效率,但仍不是最高效的做法,因为还是使用了findViewById()。
因此,进一步的效率提升改进之处是:使用一种称为“ViewHolder”的技术,缓存convertView中的View组件,使用convertView的setTag()和getTag(),每次当ListView需要创建Item的View时候,调用convertView的getTag()找出ViewHolder,重新复用。具体的使用方法如代码所示:
package zhangphil.listview;import android.app.ListActivity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ListView lv = this.getListView();setContentView(lv);ArrayAdapter adapter = new MyAdapter(this,android.R.layout.simple_list_item_2);lv.setAdapter(adapter);}private class MyAdapter extends ArrayAdapter {private int resId;private LayoutInflater mInflater;privateViewHolder holder = null; public MyAdapter(Context context, int resource) {super(context, resource);this.resId = resource;mInflater = LayoutInflater.from(context);}//子View的“容器”public final class ViewHolder {public TextView text1;public TextView text2;}@Overridepublic int getCount() {//巨大的数据return 10000;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = mInflater.inflate(resId, null);holder = new ViewHolder(); holder.text1=(TextView) convertView.findViewById(android.R.id.text1);holder.text2=(TextView) convertView.findViewById(android.R.id.text2);convertView.setTag(holder); }elseholder=(ViewHolder) convertView.getTag();holder.text1.setText("text1:"+position);holder.text2.setText("text2:"+position);return convertView;}}}
0 0
- 基于“ViewHolder”技术提升Android ListView中Item View加载效率
- viewHolder提升adaptor效率 ,ListView、BaseAdaptor总结
- ListView的使用用ViewHolder提升效率
- Android探究--使用ViewHolder提高ListView效率
- ListView之ViewHolder&下拉加载&item点击保存状态
- Android ListView中item view重复使用带来的问题
- Android ListView中item view重复使用带来的问题
- android 改变listview的item中view的值
- android ListView 滚动加载item
- Listview 加载 ViewHolder
- Android 提升ListView的运行效率
- Android:提升ListView的运行效率
- 【Android】43、提升ListView 的运行效率
- Android中优化ListView的ViewHolder模式
- Android中ListView的使用(三)----- 提升ListView运行效率
- Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
- android 修改listview item view 的方法
- android listview的item view重用
- 【C/C++学院】(29)网络编程--实现跨平台传输文件(TCP版)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- Project Server 2007 Queue Service and Event Service could not start
- iOS:编译错误 linker command failed with exit code 1 (use -v to see invocation)
- Python实例浅谈之三Python与C/C++相互调用
- 基于“ViewHolder”技术提升Android ListView中Item View加载效率
- malloc函数
- Linux vsftp安装 - 解决vsftpd的530 Login incorrect错误
- hdu-1865-1sting(大数问题)
- Android中invalidate()和postInvalidate() 的区别
- Apache OFBIZ快速上手(四)--云服务模式--OFBIZ多租户
- 黑马程序员-OC-点语法
- 修改struts2中UI标签的<s:a>进行权限控制
- 面试题16:反转链表