我有以下代码:
// Compruebo si tengo los dos fragmentos
FichaAlumnoFragment frag=(FichaAlumnoFragment)getSupportFragmentManager().findFragmentById(R.id.details_students_frag);
if (frag!=null) {
Log.i(this.getClass().getSimpleName(),"Tengo dos fragmentos");
mDualFragments=true;
}
如果我处于纵向模式,则返回null。如果我更改为横向(模拟器中的Ctrl + 11),则frag具有值并且布局正确呈现但是如果我再次更改为肖像,则应该具有空值但返回一些值并且应用程序崩溃。
两种方向的布局都不同
认为我误解了片段生命周期。有什么想法吗?
答案 0 :(得分:1)
我遇到了同样的问题。您仍然需要检查null,但是还要检查方法 isInLayout(),例如:
if (null == getSupportFragmentManager().findFragmentById(R.id.fragment_example) || !getSupportFragmentManager().findFragmentById(R.id.fragment_example).isInLayout()) {
// Fragment has not been created or it is not visible
}
答案 1 :(得分:0)
我找到了解决方案..至少一个对我有用的解决方案......
一旦我在布局(横向)中加载了一个片段,虽然我改变了方向(只有一个片段的布局),但是findFragmentById总是返回true,我再次更改为肖像。如果我也检查isInLayout它可以正常工作。
发现于:
http://android10.org/index.php/articlesuserinterface/309-learn-how-to-implement-fragments-in-android