Android的碎片问题与方向的变化
我为它定义了活动和两个布局:
第一种布局适用于横向模式下的大屏幕,第二种布局适用于其他情况。 第一个布局包含:
第二个布局包含:
当我在大屏幕上以横向模式启动应用程序时, Activity.onCreate()
调用的getSupportFragmentManager().findFragmentById()
Activity.onCreate()
正确返回这两个片段。 方向更改为纵向后, getSupportFragmentManager().findFragmentById()
对fragment2
返回非空,但应返回null
因为此布局中未定义此片段。 问题是返回的片段对象不正确,在访问它时我得到null
指针异常。 它应该是null
,不是吗?
其实......我不认为它应该是null
。
在Activity
显示布局layout-large-land
布局后, Activity
将在Fragments
中添加这两个FragmentManager
。 一旦你旋转你的Activity
, FragmentManager
保留它的状态和它里面的Fragments
,并且它仍然有Fragment2
,这就是为什么findFragmentById()
不返回null
。
Fragment2
将会在那里,但它不会被附加到Activity
,您可以使用fragment.isAdded()
或fragment.isVisible()
来检查它。
如果你的情况,你想知道你的2格(横向)或1格(肖像),也许你应该做以下检查: findViewById(R.id.secondFragmentContainer)==null
。