我正在按需将视图(不是活动)添加到 TabActivity(这意味着在 onCreate 完成后,活动可以有零个或多个选项卡)。随着时间的推移,添加了更多选项卡,现在我需要以一种理智的方式保存它们,以便以后可以恢复它们。我尝试在单个视图上使用 saveHierarchyState 等,但它们在没有来自 editTexts 等的数据的情况下被恢复。
因此,鉴于我在活动中有一个 HashMap,它从 tabkeys 映射到视图,你将如何保存这些数据并恢复它?
我正在按需将视图(不是活动)添加到 TabActivity(这意味着在 onCreate 完成后,活动可以有零个或多个选项卡)。随着时间的推移,添加了更多选项卡,现在我需要以一种理智的方式保存它们,以便以后可以恢复它们。我尝试在单个视图上使用 saveHierarchyState 等,但它们在没有来自 editTexts 等的数据的情况下被恢复。
因此,鉴于我在活动中有一个 HashMap,它从 tabkeys 映射到视图,你将如何保存这些数据并恢复它?
好的,我明白了:)
首先,我认为我需要设置视图的 ID,如此处所述——使用这种方法,Android 能够恢复视图状态。但是由于我的动态选项卡都使用来自相同布局的视图,它们的孩子都具有相同的 ID,因此 android 将覆盖数据(状态根据视图 ID 保存在稀疏数组中,因此 ID 应该是唯一的)和所有意见看起来一样。我通过手动保存视图状态并通过以下方式重新应用它来解决此问题:
SparseArray<Parcelable> container = new SparseArray<Parcelable>();
saveHierarchyState(container);
b.putSparseParcelableArray("state", container);
restoreHierarchyState(b.getSparseParcelableArray("state"));
虽然这种方法有效,但我仍然需要确定是否可以通过不在布局 xml 文件中为视图设置 ID 来让 Android 完成所有工作(如果允许/可能的话)。