android片段问题与方向更改

时间:2013-04-04 14:27:27

标签: android fragment android-orientation

我有活动,并定义了两个布局:

  1. layout-large-land
  2. 布局
  3. 第一种布局适用于横向模式下的大屏幕,第二种适用于其他情况。 第一个布局包含:

    1. 片段1
    2. fragment2
    3. 第二个布局包含:

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

1 个答案:

答案 0 :(得分:4)

实际上......我不认为它应该是null

layout-large-land中显示Activity布局后,Activity会在Fragments中添加FragmentManager。轮换Activity后,FragmentManager会保留其状态,并且Fragments位于其中,并且其中仍然包含Fragment2,这就是为什么{{1} }}不会返回findFragmentById()

null会在那里,但它不会附加到Fragment2,您可以使用Activityfragment.isAdded()进行检查。

如果在您的情况下,您想知道您的双窗格(横向)还是1窗格(纵向),可能您应该执行以下检查:fragment.isVisible()