我总是用LayoutInflater和findViewById在创建新项目getView的方法Adapter。但是在许多文章中,人们写道这findViewById非常慢,强烈建议使用“视图持有者模式”。谁能解释为什么findViewById这么慢?以及为什么视图持有者模式更快?如果需要向中添加不同的项目,该ListView怎么办?我应该为每种类型创建类吗?static class ViewHolderItem1 { TextView textViewItem;}static class ViewHolderItem2 { Button btnViewItem;}static class ViewHolderItem3 { Button btnViewItem; ImageView imgViewItem;}
2 回答
绝地无双
TA贡献1946条经验 获得超4个赞
ViewHolder模式将创建ViewHolder的静态实例,并将其在第一次加载时附加到视图项,然后在以后的调用中从该视图标记中检索它。我们知道getView()方法非常频繁地被调用,特别是当列表视图中的许多元素要滚动时,实际上,每次列表视图项在滚动时可见时都会调用该方法。
ViewHolder Pattern可以防止findViewById()多次被不必要地调用,将视图保持在静态引用上,这是节省一些资源的好模式(尤其是当您需要在listview项中引用很多视图时)。
说得很好 @RomainGuy
ViewHolder也可以并且应该用于存储临时数据结构,以避免在getView()中分配内存。ViewHolder包含一个char缓冲区,以避免从Cursor获取数据时进行分配。
- 2 回答
- 0 关注
- 977 浏览
添加回答
举报
0/150
提交
取消