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

时间:2014-10-05 19:24:03

标签: android baseadapter

我一直在努力了解BaseAdapter.hasStableIds()的工作原理。

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

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

1 个答案:

答案 0 :(得分:4)

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

在浏览AdapterViewAbsListView的源代码时,在我看来,当你在ListView / GridView上设置一个选择模式时这很有用,因为那时视图可以做更多有效管理已检查项目ID及其可视状态,包括数据集更改,其中这些已检查项目可能已移至新位置(但它们具有相同的ID)。