FindFragmentById не возвращает ноль - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть следующий код:

// 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;
        }

Если я в портретном режиме, возвращается ноль. Если я перейду на альбомную ориентацию (Ctrl + 11 в эмуляторе), значение frag будет иметь значение, а макет будет отображен правильно, но если я снова перейду на портрет, он должен иметь нулевое значение, но вернет некоторое значение, и приложение вылетит.

Планировка различна для обеих ориентаций

Думаю, я неправильно понял фрагмент lifecylce. Есть идеи?

Ответы [ 2 ]

1 голос
/ 29 октября 2012

У меня просто была такая же проблема. Вы все еще должны проверить на нулевое значение, но затем также проверить с помощью метода 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
}
0 голосов
/ 09 декабря 2011

Ну, я нашел решение .. хотя бы одно, которое работает для меня ...

Как только я загрузил фрагмент в макете (альбомной ориентации), хотя я меняю ориентацию (макет только с одним фрагментом), findFragmentById всегда возвращает истину, хотя я снова изменяю на портрет. Если я также проверяю isInLayout, он работает правильно.

Нашел по адресу:

http://android10.org/index.php/articlesuserinterface/309-learn-how-to-implement-fragments-in-android

...