FindFragmentById不返回null

时间:2011-12-05 11:33:58

标签: android fragment

我有以下代码:

// 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具有值并且布局正确呈现但是如果我再次更改为肖像,则应该具有空值但返回一些值并且应用程序崩溃。

两种方向的布局都不同

认为我误解了片段生命周期。有什么想法吗?

2 个答案:

答案 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