5

我以为我已经理解您应该在 onCreate() 中调用 FragmentTransaction.add() 并在 onDestroy() 中调用 FragmentTransaction.remove()。我的应用程序在 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() 中,我什么时候调用这些东西?

4

2 回答 2

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();
    }
  }
于 2013-06-26T20:46:04.430 回答
2

好的,您的解决方案有效,但不使用:

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

我用了:

 if (savedInstanceState==null)

显然,片段管理器不是由 onCreate 函数设置的。但是,由于您的答案大部分是正确的,因此我将其标记为答案。

我要再次感谢你。这是你第二次给我很大的帮助,我真的很感激。

于 2013-06-28T21:11:47.580 回答