猿问

ListView适配器中的findViewById与View Holder模式

我总是用LayoutInflater和findViewById在创建新项目getView的方法Adapter。


但是在许多文章中,人们写道这findViewById非常慢,强烈建议使用“视图持有者模式”。


谁能解释为什么findViewById这么慢?以及为什么视图持有者模式更快?


如果需要向中添加不同的项目,该ListView怎么办?我应该为每种类型创建类吗?


static class ViewHolderItem1 {

    TextView textViewItem;

}


static class ViewHolderItem2 {

    Button btnViewItem;

}

static class ViewHolderItem3 {

    Button btnViewItem;

    ImageView imgViewItem;

}


千万里不及你
浏览 978回答 2
2回答

绝地无双

ViewHolder模式将创建ViewHolder的静态实例,并将其在第一次加载时附加到视图项,然后在以后的调用中从该视图标记中检索它。我们知道getView()方法非常频繁地被调用,特别是当列表视图中的许多元素要滚动时,实际上,每次列表视图项在滚动时可见时都会调用该方法。ViewHolder Pattern可以防止findViewById()多次被不必要地调用,将视图保持在静态引用上,这是节省一些资源的好模式(尤其是当您需要在listview项中引用很多视图时)。说得很好 @RomainGuyViewHolder也可以并且应该用于存储临时数据结构,以避免在getView()中分配内存。ViewHolder包含一个char缓冲区,以避免从Cursor获取数据时进行分配。
随时随地看视频慕课网APP

相关分类

Android
我要回答