Adapters and recycling
究其原因,使用ViewHolder和HolderView是为了提高AdapterView的性能。Adapter通过使用AdapterView来循环(调用)View,这些View是AdapterView用来显示内容的。更多的信息请参阅
这儿。
ViewHolder模式简短解释的参考可以在
这儿查看。
HolderView
HolderView继承自某种View,in the example a GridLayout since that was what the layout was using before being replaced that with a “merge” tag. HolderView存储了所有视图的组件,就像ViewHolder一样来避免(频繁,昂贵的)通过findViewById()进行查找。 但是不像ViewHolder,当子View被请求时,ViewHolder有责任为它处理数据。这使得Adapter更小,更容易理解和维护。典型的getView方法看起来像这样:
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
HolderView holderView;
// Important to not just null check, but rather to a instanceof
// since we might get any subclass of view here.
if (convertView instanceof HolderView) {
holderView = (HolderView) convertView;
} else {
holderView = new HolderView(mContext);
}
holderView.bind(new Digit(i));
return holderView;
}
同时,HolderViewd对象看起来应该像这样:
public class HolderView extends GridLayout {
private TextView mDigitDigit;
private String mDigitText;
public HolderView(Context context, AttributeSet attrs) {
super(context, attrs);
View v = LayoutInflater.from(context).inflate(R.layout.list_detail, this);
mDigitDigit = (TextView) v.findViewById(R.id.list_detail_digit);
mDigitText = context.getResources().getString(R.string.list_detail_digit);
}
public void bind(Digit digit) {
mDigitDigit.setText(String.format(mDigitText, digit));
}
}
下面的连接是github上的例子项目,你可以看到两个分支,一个是
ViewHolder,一个是
HolderView。
因此本质上两种方法解决相同的问题,非常的相似。主要的不同就是处理UI的责任从Adapter中移到了View中。
原文连接:http://www.jayway.com/2013/11/06/viewholder-vs-holderview/
参考连接:http://blog.chengyunfeng.com/?p=543
分享到:
相关推荐
超简洁ViewHolder,直接加入工具类就可以了
viewHolder封装的工具类,及其使用
万能的ViewHolder
android ViewHolder的超简洁写法,不用为每个adapter都创建一个ViewHolder类
ViewHolder超级简洁写法 博客地址:http://blog.csdn.net/kroclin/article/details/40868291
ViewHolder和Adapter 工具类
通用Adapter 通用ViewHolder
跟传统的ListView的布局应用,改善了Adapter,使用ViewHolder来提高了很多效率,使用ViewHolder来编写的适配器
Recyclerview由于ViewHolder的复用显示错乱问题解决
我们在使用ListView的时候,经常会使用的ViewHolder方式作为缓存,每次都需要手动的通过viewholder.icon = convertview.findVIewByid(id);一般的app都会有好几个页面会用到ListView,这样的话我们的代码量就会很大,...
把SparseArray绑定到一个view,SparseArray 初始化会分配10长度的地址,理论上会浪费了内存,但是这些都在允许范围内。省去了重复写viewholder的重复,重复。。自己留作纪念。
万能的Adapter和ViewHolder,写这些真的是写吐了,提高效率
ListViewAdapter和ViewHolder代码,全面的安卓listview适配器源码。使得使用listview绑定数据显示非常方面
对ListView的适配器BaseAdapter进行优化,减少代码量,可以继续对此工具类添加方法
通常我们在一个项目中会多处使用到listview,我们为什么不把它抽取出来呢,这样使用起来方便一百倍,而且可以提高代码的复用率
listview优化 BaseAdapter
通用ViewHolder
看到http://www.cnblogs.com/mengdd/p/3254323.html中圣骑士Wind博主的文章很好,就整理了一个Demo。供大家学习使用。如果有啥不恰当的地方,还请大家多多指教
ListView的adapter的getView方法中,我们使用ViewHolder来保证getView的执行效率,例子是一个通用的ViewHolder的实现。
这里介绍了listView的基本使用,数据源的添加,以及viewHolder机制的添加以及介绍