7

我有一个带有一个 RadioGroup 的自定义组件,该组件有两个 RadioButton、ids@+id/radioButton1@+id/radioButton2. 另一方面,有一个带有五个选项卡的 TabActivity。在每个选项卡上,此组件都使用了多次。

这是问题所在,当方向更改并重新创建活动时,所有 RadioButton 都加载了相同的 attrs,这包括android:textandroid:margin甚至是我创建的样式化的 attrs。所有具有相同 id 的 CheckBox 也会发生这种情况。

我花了一些时间试图找出为什么会发生这种情况,并得出结论认为 android 是在 onRestoreInstanceState 中这样做的。如果我评论调用 super 方法的行,它可以正常工作。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // super.onRestoreInstanceState(savedInstanceState);

}

这是应该的吗?或者可以做些什么来导致这种情况?

我猜这不是正常行为,因为当创建自定义视图时,它会使用具有相同 ID 的相同视图膨胀相同的布局。因此,不可能每次都实例化一个新的自定义视图,为其子视图生成不同的 id。使用上面或android:configChanges清单上的代码对我来说似乎是一个不好的解决方法。因此,任何帮助表示赞赏。

4

2 回答 2

3

经过一段时间的寻找解释,我终于在 android google 组中找到了一个来自 Romain Guy 的很棒的解释,虽然它没有提到自定义视图。

“使用相同的 id 是可以的,除非您需要视图来保存其状态。id 是在保存状态时标识视图的标识,因此工具包只是认为您的两个视图是相同的。但这仅在活动中是正确的。 "

“在两个不同的活动中使用相同的 id 没有问题。如果你对你正在做的事情很小心,在同一个活动中使用相同的 id 也没有问题(例如,如果具有共享 id 的视图确实不需要保存任何状态。)在您的情况下,因为活动是一组选项卡的一部分,它们实际上与一个独特的上下文相关联,这意味着您将遇到共享 ID 的问题。“

这是链接

于 2012-11-20T19:41:17.833 回答
1

您的 savedInstanceState 方法是什么样的?

我建议分配给单选按钮文本的变量在方向更改之间不会持续存在。请记住,当方向改变时,活动将完全重建/重新启动。

于 2012-10-20T08:02:45.827 回答