是否可以在 Android 中保留一个 id 范围(不是单个 id)?
如果我可以在特定名称下保留给定数量的 id,那么根据我自己的标准,我可以生成与 android 可能分配给视图的任何其他 id 不冲突的可预测动态 id。
例如,如果我可以为我的自定义视图保留 10,000 个范围CustomerView
(假设最多可以滚动 10,000 个项目),那么基于保留的 id 前缀,我可以生成一个有保证的唯一且可预测的 id不与我的完整视图层次结构中的任何其他视图 ID 冲突。
这样,我的保存和恢复工作与我的视图层次结构中可能存在的其他视图无关,因为保存恢复完全与视图 ID 相关联。
为了更好地理解,假设我有一个名为的自定义视图CustomerView
,并且我在 name 下总共保留了 100 个 id custom_view_id_bag
。
如果 Android 允许此预订,我集合中索引 10 处的客户将始终获得custom_view_id_bag
+的 id,10
而不管视图被重新创建的次数(这是 的问题View.generateViewId()
)并且此 id 保证在任何视图中的所有视图中都是唯一的我的自定义视图所在的视图层次结构。
这样,我可以保证我的onSaveInstance
&onRestoreInstance
可以正常工作,而与 Android 在其他地方分配的 ID 无关
问题View.generateViewId()
在于它会生成新的唯一 ID 但不可重复的 ID。但恢复实例仅适用于可重复的 id。
此外,问题ids.xml
在于,您只能预订已知数量的项目。
用例:您有动态数量的视图,并且希望为同一视图设置相同的 id,而与调用onDestroyView
&的次数无关。onCreateView