为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2019-10-09 15:09:50
我总是用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获取数据时进行分配。


查看完整回答
反对 回复 2019-10-09
  • 2 回答
  • 0 关注
  • 977 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信