在android中提交带有状态丢失的dialogfragment事务有什么效果:因为它只是一个简单的错误对话框,im显示了一个ok按钮来关闭它,所以我不需要担心状态丢失。
在我的dialogfragment子类中,我已经覆盖了show类,以便它承诺包含状态丢失,这样我就不会得到illegalStateException…

 @Override
  public void show(FragmentManager manager, String tag) {
      FragmentTransaction ft = manager.beginTransaction();
      ft.add(this, tag);
      //its just dialogs so  can we allow state loss to not trigger illegalStateExceptions
      ft.commitAllowingStateLoss();
  }

最佳答案

据此Article
最初,您试图避免此错误(原因:java.lang.IllegalStateException:在OnSaveInstanceState之后无法执行此操作)。
这个错误源于这样一个事实,即onSaveInstanceState()的这些bundle对象表示调用onSaveInstanceState()时某个活动的快照,仅此而已。这意味着当调用FragmentTransaction#commit()之后调用onSaveInstanceState()时,事务将不会被记住,因为它从一开始就没有被记录为活动状态的一部分
你试图通过使用commitAllowingStateLoss()来解决这个问题,让我们讨论一下
调用commit()commitAllowingStateLoss()的区别在于,如果发生状态丢失,后者不会抛出异常。通常您不想使用此方法,因为它意味着可能会发生状态丢失。当然,更好的解决方案是编写应用程序,以确保在保存活动状态之前调用commit(),因为这将带来更好的用户体验。除非无法避免状态丢失的可能性,否则不应使用commitAllowingStateLoss()

关于android - 使用commitAllowStateLoss的dialogfragment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24432391/

10-10 22:57