我有活动,并定义了两个布局:
第一种布局适用于横向模式下的大屏幕,第二种适用于其他情况。 第一个布局包含:
第二个布局包含:
当我在大屏幕上以横向模式启动应用时,getSupportFragmentManager().findFragmentById()
中调用的Activity.onCreate()
会正确返回两个片段。将方向更改为纵向后,getSupportFragmentManager().findFragmentById()
的{{1}}不返回null,但它应返回fragment2
,因为此片段未在此布局中定义。问题是返回的片段对象不正确,并且在访问它时会得到null
指针异常。它应该是null
,不应该吗?
答案 0 :(得分:4)
实际上......我不认为它应该是null
。
在layout-large-land
中显示Activity
布局后,Activity
会在Fragments
中添加FragmentManager
。轮换Activity
后,FragmentManager
会保留其状态,并且Fragments
位于其中,并且其中仍然包含Fragment2
,这就是为什么{{1} }}不会返回findFragmentById()
。
null
会在那里,但它不会附加到Fragment2
,您可以使用Activity
或fragment.isAdded()
进行检查。
如果在您的情况下,您想知道您的双窗格(横向)还是1窗格(纵向),可能您应该执行以下检查:fragment.isVisible()
。