【发布时间】:2014-02-01 18:19:14
【问题描述】:
我有一个片段,有几个视图。其中两个是自定义的:我们称它们为FrameLayoutA 和FrameLayoutB。问题是FrameLayoutB 在我返回片段时没有保存它的状态。
没有onSaveInstanceState/onRestoreInstanceState/setRetainInstance/onRetainNonConfigurationInstance/getLastNonConfigurationInstance方法被调用/重载,FrameLayoutA/FrameLayoutB类和fragment的类中也没有。
找不到保存一个视图状态而另一个视图状态未保存的原因。有任何想法吗?我错过了什么吗?
更新:
在onCreateView() 停止调试器,显然我恢复的值在inflater->mChildFragment->mSavedViewState。 inflater 的类型为 org.holoeverywhere.LayoutInflater。仍在寻找为什么某些视图被保存但其他视图没有保存的答案。
更新:
所以有两个我的自定义视图,它们在其中膨胀了相同的布局。布局具有声明了 id 的 EditTexts。所以View.dispatchRestoreInstanceState() 正在从第二个视图中的值恢复两个视图上的值。所以当我回到片段时,我的两个自定义视图都有相同的值。
【问题讨论】:
-
确保你的view-s ID是唯一的,也许你有相同的ID并且view会覆盖之前保存的值。
-
进一步调试并注意到这些值保存在
inflater中。更新问题。 -
嗯,我想,这就是根本原因:我对
FrameLayoutB有两个视图,而第二个视图有不同的状态,所以我填写的b1字段不可见在b2中,所以这应该是b1视图状态被空b2状态覆盖的原因。很快就会确认。 -
好的。看起来我找到了。我不得不手动保存状态,但禁用它的子视图的自动状态保存。很快就会发布答案。
标签: android android-fragments android-edittext savestate