Android:何时使用FragmentTransaction.remove是否合适?

时间:2013-06-26 20:27:39

标签: android crash fragmenttransaction

我以为我已经明白你应该在onCreate()和onDestroy()中的FragmentTransaction.remove()中调用FragmentTransaction.add()。我的应用程序在onDestroy()中崩溃并出现此错误:

06-26 15:25:50.213: E/AndroidRuntime(579): java.lang.RuntimeException: Unable to destroy activity {com.myapp/com.myapp.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed

如果不在onCreate / onDestroy()中,我什么时候调用这些东西?

2 个答案:

答案 0 :(得分:4)

  

我的问题是当我切换到我的水平视图,然后回到我的垂直视图时,我现在至少有一个嵌套片段的重复布局。

我的猜测是,这是因为您总是onCreate()中添加片段。 Android会自动在配置更改时重新创建片段。因此,onCreate()应该在添加之前检查片段是否已经存在:

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) {
      getSupportFragmentManager().beginTransaction()
                                 .add(android.R.id.content,
                                      new RotationFragment()).commit();
    }
  }

答案 1 :(得分:2)

好的,您的解决方案有效,除了使用:

 if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null)

我用过:

 if (savedInstanceState==null)

显然片段管理器不是由onCreate函数设置的。但是,由于你的回答大多是正确的,我将其标记为答案。

我想再次感谢你。这是你第二次对我有很大的帮助,我真的很感激。