让同一项在由 CursorAdapter 支持的列表视图中出现两次是否安全



我需要显示数据库查询中的项目列表。有些项目需要显示两次;如果设置了特定标志(这是主要排序标准),则一次位于列表顶部,然后根据次要/默认排序标准再次位于其在列表中的自然位置。

我的数据库查询正确返回了相关项目的多行。行仅区别于特殊标志,结果完全符合我的预期。

我的问题:从 CursorAdapter 或 ListView 的角度来看,具有相同_id的多行是否安全?或者是否要求_id字段在给定的结果集中是唯一的?

它似乎工作得很好,但我不知道我是否只是幸运。

简短的回答...有点。

稍长但仍然很快的答案...只要您不使用ListViews选择模式...你会没事的。

CursorAdapters根据"_id"列为给定项目派生其 ID。AFAIK,这几乎只在确定选中或激活哪个项目时使用。仅当您启用其中一个选择模式时,整个选中或激活状态才会成为相关问题。事实上,对于任何适配器,没有返回带有 getItemId() 的唯一 ID 将导致以下相同的问题。

假设您已将选择模式设置为 CHOICE_MODE_MULTIPLE_MODAL。如果用户激活了您的两个重复行 ID 项;然后旋转设备,他们会发现只有 1 个项目已恢复到激活状态,而不是两个项目。

旁注,这也可能会影响也可能不会影响所选状态。快速掩盖源代码看起来像这样,即使它通过 id 和位置跟踪选定的项目......它似乎只使用位置编号来确定要显示的选定视图。不过我可能是错的。

最新更新