Как найти фрагмент, который был изменен динамически? - PullRequest
4 голосов
/ 22 августа 2011

У меня есть layout с двумя Fragments в нем.Второй загружается динамически.

Fragment fg = EmptyRightFrag.newInstance();
        getFragmentManager().beginTransaction().add(R.id.right_frag, fg)
            .commit();

Затем этот второй frame заменяется другим «Фрагментом».

    Fragment fg = MyClass.newInstance();
    getFragmentManager().beginTransaction().replace(R.id.right_frag, fg)
                .commit();

Наконец мне нужно инициализировать второй Fragment, вызвав:1011 *

MyClass field = ((MyClass)getFragmentManager().findFragmentById(R.id.right_frag));

Но здесь я получаю java.lang.ClassCastException, заявив, что EmptyRightFrag нельзя привести к MyClass.

Ответы [ 2 ]

2 голосов
/ 07 марта 2014

Просто позвоните getFragmentManager().executePendingTransactions(); до getFragmentManager().findFragmentById() и все будет хорошо.

2 голосов
/ 22 августа 2011

Куда вы звоните findFragmentById()?Сразу после добавления?

Документы для commit() говорят об этом:

Планирует принятие этой транзакции.Фиксация происходит не сразу;это будет запланировано как работа над основным потоком, которая будет выполнена в следующий раз, когда поток будет готов.

Это означает, что Fragment не будет добавлен некоторое время (по крайней мере, до того, как вашметод вернулся).В любом случае вам, вероятно, не следует обрабатывать инициализацию таким образом, лучше позволить фрагменту позаботиться об этом в onCreate() или что-то в этом роде.

...