我遇到了一个问题,我有一个包含多个片段的Activity . 对于任何单个片段,您可以执行搜索操作,该工作正常...如果您从任何片段中搜索,它将显示一个新的Activity来处理搜索,然后将结果返回到Activity以处理显示新片段 . 问题是,在搜索操作之后,我希望能够使用 popBackStackImmediate(...)
清除(几乎)所有碎片,并且因为 saveInstanceState(...)
被调用,我得到一个异常,说:
"java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState"
有没有想过如何在 onSaveInstanceState
之后从后面的堆栈弹出?
6 回答
显然我的问题来自onActivityResult(...)中的调用
我能够通过将UI修改代码放在Runnable中来解决问题,然后将Runnable发布到主线程:
在您的逻辑之前首先调用
super.onActivityResult
,问题将得到解决,因为FragmentActivity的onActivityResult
调用mFragments.noteStateNotSaved();
这个答案可能对某人有所帮助 . 当您的活动不可见时,您无法调用popBackStackImmediate(...)它会抛出 illegal Exception: can not perform this action after onsaveinstancestate.
而不是你可以检查,活动是否可见?在调用popBackStackImmediate()之前 .
如果您的活动不可见,请不要调用popBackStackImmediate . Through the boolean flag you can achieve, when activity opens again .
例如:
在开始相关活动之前立即弹出堆栈怎么样?在调用startActivity之前不会调用onSaveInstanceState(并且新活动出现在当前的one0之前......紧接在此之前,将片段堆栈弹回到所需状态,然后调用startActivity .
由于片段堆栈是正常任务/后台堆栈的一层,我认为“从中间”修改它会导致问题,这就是你看到问题的原因 .
我已经尝试了许多解决方案来使其工作 . 只有这对我有用;
或者只是把它放在try-catch中: