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 。
