关闭

ViewHolder vs HolderView

1615人阅读 评论(0) 收藏 举报
分类:

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


0
0
查看评论

HolderView vs ViewHolder实例

HolderView 与 ViewHolder做Android的伙伴都不会mos
  • tsdfk1455
  • tsdfk1455
  • 2014-04-14 11:01
  • 988

ViewHolder VS HolderView ?

ViewHolder 模式在 Android 中大家应该都不陌生了,特别是在 ListView 中通过 ViewHolder 来减少 findViewById 的调用和 类型的转换。 而 HolderView 模式是把 ViewHolder 给业务逻辑化,不再仅仅只是保存一些 Vie...
  • u011176244
  • u011176244
  • 2014-03-02 16:12
  • 903

listview的Adapter性能优化之viewholder终极用法,无需生成holder内部类类

list的Adapter无需再生成与item布局类相对应的内部类了。
  • banana1006034246
  • banana1006034246
  • 2015-06-25 15:37
  • 627

声明ViewHolder(或Handler)内部类时,建议使用static关键字的原因

1、首先理解静态内部类和非静态内部类的主要区别之一。非静态内部类会隐式持有外部类的引用,就像大家经常将自定义的adapter在Activity类里,然后在adapter类里面是可以随意调用外部activity的方法的。当将内部类定义为static时,就调用不了外部类的实例方法了,因为这时候静态内部类...
  • SPENCER_HALE
  • SPENCER_HALE
  • 2017-03-19 23:05
  • 284

Android开发中ViewHolder模式的复用写法&&一劳永逸哦

今天给大家分享一个很实用的ViewHolder中的写法。这个大家肯定写adapter的时候是基本都会写的,主要是用来缓存控件,优化加载的效率。 很多时候,我们都是自定义一个adapter,然后继承BaseAdapter,并重写相关方法。最后在这个adapter类里写一个ViewHolder内容类,用...
  • csdnzouqi
  • csdnzouqi
  • 2016-12-22 17:53
  • 1942

ListView优化adapter getview的两种方式ViewHolder vs HolderView

一、ViewHolder方式 如果你还没听说过ViewHolder,那么你该去好好看看官方文档了,而不是埋头写代码。 一个ListView的item布局中需要赋值的子元素太多为了避免重复的调用FindViewById方法,我们一般考虑使用ViewHolder方式来实现BaseAdap...
  • u010665691
  • u010665691
  • 2014-10-22 07:21
  • 469

HolderView 与 ViewHolder 优化App性能

HolderView 与 ViewHolder做Android的伙伴都不会陌生吧,都是为了提升ListView、gridView等这类View的adapter性能, 把多个属性封装到一个类中,也就是面向对象的思想。 ViewHolder实在adapter中建立一个对象,但是没有做任何的业...
  • he90227
  • he90227
  • 2015-03-01 10:18
  • 539

关于ViewHolder的终极优化

传统ViewHolder存在问题举例: 解决办法 重构办法
  • lixiaodaoaaa
  • lixiaodaoaaa
  • 2016-04-28 14:05
  • 1253

Android中ViewHolder模式开发的详细解释

Android开发中ViewHolder模式开发的详细解释: 1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法。 (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolder里面,再在...
  • u014225510
  • u014225510
  • 2015-07-05 13:19
  • 3457

封装好的万能ViewHolder和Adapter

下面我把自己优化的万能ViewHolder和Adapter跟大家分享一下,也为自己留一个记录。
  • xf396191344
  • xf396191344
  • 2015-04-19 15:44
  • 781
    个人资料
    • 访问:285178次
    • 积分:3741
    • 等级:
    • 排名:第10236名
    • 原创:87篇
    • 转载:0篇
    • 译文:2篇
    • 评论:147条
    最新评论
    屏蔽广告