在交易中替换碎片时的碎片堆栈错误?
以下是导致问题的场景:
这个异常由Fragment A引发,因为我在其onSaveInstanceState()方法中保存了一些Views的值(EditTexts eg)。 看起来,在第二次轮换时,系统并没有实例化这些视图,所以当我询问它们的值时,我得到一个NullPointer异常。 这可以以某种方式避免吗? 或者正在使用.replace操作保存到堆栈中的片段传输未被修改?
我有这个,但不能完全回忆我所做的修复的具体细节,但总的来说(和大脑转储的道歉),我做了以下工作:
在onCreate
调用setRetainInstance(true)
以避免片段重新创建
将编辑控件的状态保存在onSaveInstanceState
,以便在活动被onSaveInstanceState
时使用,并且您使用非空的包进行恢复(对于使用1的方向更改,您不应得到非空包)
保持成员变量中的编辑控制值(因为片段不会被重新创建),确保它们在编辑控件中的onDestroyView
更新,然后使用它们恢复onCreateView
的编辑控件值
有一个标志,我在onCreateView
设置为true,在onDestroyView
设为false,并确保在视图不在时不触摸UI控件。
顺便说一句,在将事务添加到后端堆栈时使用replace
是完全可以的。
希望在那里有一些有用的东西。 彼得。
链接地址: http://www.djcxy.com/p/10061.html上一篇: Fragment backstack bug when replacing fragments in a transaction?