1

我定义了活动和两个布局:

  1. 大地布局
  2. 布局

第一种布局适用于横向模式下的大屏幕,第二种布局适用于其他情况。第一个布局包含:

  1. 片段1
  2. 片段2

第二个布局包含:

  1. 片段1

当我在大屏幕上以横向模式启动应用程序时,getSupportFragmentManager().findFragmentById()调用Activity.onCreate()正确返回两个片段。方向更改为纵向后,getSupportFragmentManager().findFragmentById()返回不为 null fragment2,但它应该返回null,因为此片段未在此布局中定义。问题是返回的片段对象不正确,并且null在访问它时出现指针异常。应该是null,不是吗?

4

1 回答 1

4

其实……我觉得不应该null

在您的layout-large-land布局显示在 中后ActivityActivity将把它们都添加FragmentsFragmentManager. 一旦你旋转了你的Activity,它会FragmentManager保留它的状态,它的Fragments内部,它仍然有Fragment2它,这就是为什么findFragmentById()不返回null

Fragment2在那里,但它不会附加到Activity,您可以使用fragment.isAdded()或进行检查fragment.isVisible()

如果在您的情况下,您想知道您的 2 窗格(横向)还是 1 窗格(纵向),也许您应该进行以下检查:findViewById(R.id.secondFragmentContainer)==null

于 2013-04-04T14:42:32.653 回答