android - 让 BaseAdapter.hasStableIds() 返回 true 可以解决什么问题?

标签 android baseadapter

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

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

但是,如果数据已更改而 id(和位置)保持不变,这不会是一个问题吗?如果这确实是一个问题,那么返回 true 到底什么时候有帮助?

最佳答案

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

在浏览 AdapterViewAbsListView 的源代码时,在我看来,当您在 ListView/GridView 上设置选择模式时,这非常有用,因为这样该 View 可以对选中的项目 ID 进行更有效的管理,并且它们是可视状态,包括跨数据集更改,其中这些选中的项目可能已移动到新位置(但它们具有相同的 ID)。

关于android - 让 BaseAdapter.hasStableIds() 返回 true 可以解决什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206334/

相关文章:

android - 我如何画一条半透明的白线?

Android 自定义适配器 - 不会返回 View ?

android - Adapter-仅在值发生变化时显示 View

java - Android baseAdapter 在向上滚动时停止评估 if 语句

android - 异步更改 ListView 中的特定项目

java - 如何导入android开源库?

android - 将 zxing 导入到 Android Studio 项目中

Android:getArguments() 总是得到空值

android - 在 AsyncTask 中将对象作为参数传递

Android删除自定义数组适配器中的 ListView 行