Android:如何确保视图具有唯一的 ID,以便 onRestoreInstanceState 工作

Posted

技术标签:

【中文标题】Android:如何确保视图具有唯一的 ID,以便 onRestoreInstanceState 工作【英文标题】:Android :How to make sure views have unique ids so that onRestoreInstanceState works 【发布时间】:2014-08-24 16:48:29 【问题描述】:

android 开发人员指南说,您的活动中的视图需要具有唯一的 ID 才能在 onRestoreInstanceState() 中恢复它们。这是真的吗,还是足以确保每个视图的所有子视图都有不同的 id?

如果整个层次结构中的所有视图都应该具有唯一的 id,那么就不可能将同一布局资源膨胀两次并将两个副本添加到同一视图组。相反,您必须以编程方式完成所有操作,并为您使用的每个视图手动分配唯一 ID。

【问题讨论】:

【参考方案1】:

ID 在膨胀布局中应该是唯一的(一个 .xml 资源文件)。但是,描述相同布局(例如,横向和纵向布局视图)的 .xml 资源应该具有相同的 ID

【讨论】:

感谢您的回答。自从询问后,我发现 onRestoreInstanceState 仅在视图具有唯一 ID 时才有效,因为视图存储在 SparseArray 中,ID 作为键。但这并不能解释该怎么做。例如。如果您使用构造函数 ArrayAdapter(Context, int) 您正在创建一个 ViewGroup,其子项共享相同的 id。当您使用标签 或两次膨胀相同的布局时,您会遇到类似的问题。人们会忽略这一点并接受 onRestoreInstanceState 不起作用吗?

以上是关于Android:如何确保视图具有唯一的 ID,以便 onRestoreInstanceState 工作的主要内容,如果未能解决你的问题,请参考以下文章

LINQ:如何选择唯一行:具有多列的 max(id)?

如何生成唯一的Android设备ID

如何在android中滚动视图?

oracle:物化视图中的主键列

如何在具有多个唯一图形的布局上实现 Dash/Plotly 清单持久性?

如何使用 RecyclerView 显示空视图?