saveInstanceState()后的popBackStack()

我遇到了一个问题,我有一个活动与多个片段。 对于任何单独的片段,您可以执行search操作,这很好…如果从任何片段search,它将显示一个新的活动来处理search,然后将结果返回到活动来处理显示新的片段。 问题是,在search操作之后,我希望能够使用popBackStackImmediate(...)清除(几乎)所有的碎片,并且由于saveInstanceState(...)被调用,所以我得到一个exception:

 "java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState" 

任何想法如何在onSaveInstanceState被调用后从后端堆栈popup?

  • 加载应用程序打开的所有片段
  • 如何在android中按下通知时打开片段页面
  • 用兼容包android充气片段
  • Android - TextView中的标签
  • android.view.InflateException:二进制XML文件行#7:错误膨胀类的片段
  • 当方向更改时使用选项卡重新加载活动时,Fragment会初始化两次
  • 如何设置android的动作条标签的高度
  • 带活动的TabHost与带碎片的ActionBar
  • 显然我的问题产生于onActivityResult(…)

    我可以通过将UI修改代码放入Runnable中,然后将Runnable发布到主线程来解决问题:

     Runnable r = new Runnable() { @Override public void run() { // UI code here } }; Handler h = new Handler(); h.post(r); 

    在您的逻辑之前先调用super.onActivityResult ,并且问题将得到解决,因为FragmentActivity的onActivityResult调用mFragments.noteStateNotSaved();

    这个答案可能有助于某人。 当您的活动不可见时,您无法调用popBackStackImmediate(…)会抛出非法的exception:在onsaveinstancestate后无法执行此操作。

    而不是你可以检查,活动是否可见或不? 在调用popBackStackImmediate()之前。

    如果您的活动不可见,请不要调用popBackStackImmediate。 当活动再次打开时,可以通过布尔标志实现

    在开始关联活动之前立即popup堆栈呢? onSaveInstanceState不会被调用,直到startActivity被调用(并且新的活动出现在当前的one0之前…之前,popup片段堆栈回到你想要的状态,然后调用startActivity。

    由于片段堆栈是普通任务/背堆栈上的一层,我认为修改“从中间”会导致问题,这就是为什么你看到这个问题。