其他分享
首页 > 其他分享> > android – BaseAdapter.hasStableIds()返回true解决了什么?

android – BaseAdapter.hasStableIds()返回true解决了什么?

作者:互联网

我一直试图了解BaseAdapter.hasStableIds()的工作原理.

根据我的阅读,从此方法返回true有助于适配器确定是否必须重新创建视图或保持不变.我猜测适配器以某种方式将位置映射到id,如果映射保持不变,则在调用notifyDataSetChanged()时,适配器不执行任何操作.

但是如果在id(和位置)保持不变的情况下更改了数据,这不是问题吗?如果这确实是一个问题,那么何时返回真正的帮助?

解决方法:

hasStableIds()== true表示项目ID不会更改基础数据项,而不会更改该项目的数据.例如.相同的联系人具有相同的ID,无论它出现在列表中的哪个位置,但其名称可能会随着时间的推移而改变 – 用户可以编辑它,添加昵称等.可以想象显示每个项目没有一些稳定ID的数据(也许数据不是你的,你无法访问适合从getItemId()返回的唯一ID,例如与long返回类型不兼容).

在浏览AdapterView和AbsListView的源代码时,我觉得这在ListView / GridView上设置选择模式时非常有用,因为那时视图可以对已检查的项ID进行更有效的管理,并且它们是可视的状态,包括跨数据集更改的位置,这些已检查的项目可能已移至新位置(但它们具有相同的ID).

标签:android,baseadapter
来源: https://codeday.me/bug/20191002/1844444.html