Android中优化ListView的ViewHolder模式
来源:互联网 发布:旅游市场数据 编辑:程序博客网 时间:2024/05/16 11:14
使用Adapter填充ListView中数据的时候,getView方法每次都会调用findViewById的方法来实例化每个item中的组件。也就是说,ListView中有多少个item,item里面的组件就会被实例化多少次。这明显会增加ListView的内存占用。而使用ViewHolder来优化adapter可以大大提高ListView的效率。
使用ListView也很简单,只要在自定义的Adapter中,定义一个内部类ViewHolder,然后把cell中出现的组件作为其成员变量就可以了。一个具体的adapter例子的代码如下所示。
package com.eeyes.ViewHolderAdapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;import java.util.Map;/** * Created by guolei on 2016/3/6. */public class ViewHolderAdapter extends BaseAdapter { /**用来填充的内容**/ private List<String> mTitleData; private List<String> mContentData; private List<Integer> mResId; private LayoutInflater mInflater; public ViewHolderAdapter(Context context, List<Integer> resId, List<String> titleData, List<String> contentData){ this.mResId = resId; this.mTitleData = titleData; this.mContentData = contentData; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mTitleData.size(); } @Override public Object getItem(int position) { return mTitleData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null){ holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.test_layout, null); holder.titleTextView = (TextView) convertView.findViewById(R.id.title); holder.contentTextView = (TextView) convertView.findViewById(R.id.content); holder.imageView = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.contentTextView.setText(mContentData.get(position)); holder.titleTextView.setText(mTitleData.get(position)); holder.imageView.setImageResource(mResId.get(position)); return convertView; } public final class ViewHolder{ public ImageView imageView; public TextView titleTextView; public TextView contentTextView; }}
然后,我们就可以通过Adapter的构造方法,来填充自己的数据
adapter = new ViewHolderAdapter(this, mResId, mTitleData, mContentData);
这样,就可以实现ListView的效果了。
效果图:
源码: https://github.com/futureshine/ViewHolderAdapter
0 0
- Android中优化ListView的ViewHolder模式
- Android - ViewHolder优化ListView
- Android ViewHolder 优化 ListView
- android ListView的优化之 static ViewHolder
- listview的优化---viewHolder
- ListView的优化--ViewHolder
- ListView的ViewHolder优化
- 使用ViewHolder模式优化ListView
- 使用ViewHolder模式优化ListView
- android基础笔记——使用viewholder模式优化ListView
- ViewHolder的listview的优化
- ListView的优化:convertView + viewHolder
- ListView优化--ViewHolder的使用
- ListView的优化(ViewHolder)
- Android常用控件ListView的简单优化之一: 在ViewHolder中定义static静态内部类
- android ListView优化之ViewHolder的超简洁写法
- Android ListView的性能优化(ViewHolder和HashMap)
- Android的viewHolder模式
- 基本算法dijkstra的POJ水题推荐
- hdu1231 连续子数组最大和(分治,动态规划)
- C语言中extern的用法
- 算法补习-第七天-线性表(上)
- 详解Dagger2
- Android中优化ListView的ViewHolder模式
- 为什么写博客
- TCP文件上传案例
- 基于事件的时序控制
- Android中ArrayAdapt&SimpleAdapt的使用
- 3.C语言常用运算符
- Codeforces Round #345 (Div. 2)(B)暴力
- 【BZOJ1066】【SCOI2007】蜥蜴(网络流isap)
- http://blog.csdn.net/liang12360640/article/details/50350648