0

Я получаю NullPointerException при получении Fragment по его тегу, определенному во время его добавления, через SupportFragmentManager.Извлечение фрагмента с помощью фрагмента Фрагмент

Вот код:

FragmentOne fragmentOne = new FragmentOne(); 
    getSupportFragmentManager().beginTransaction().add(R.id.container, fragmentOne,FRAGMENT_ONE_TAG).addToBackStack(null).commit(); 

    FragmentOne fragmentOneInstance = (FragmentOne) getSupportFragmentManager().findFragmentByTag(FRAGMENT_ONE_TAG); 
    Log.i("Fragment One Instance: ", fragmentOneInstance.getTag()); 

Сообщение об ошибке:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.demo.fragment/com.ms.android.demo.fragment.MainActivity}: java.lang.NullPointerException 
+0

Что линия все же произошло NullPointer? Журнал? –

+0

В строке 'Log.i()' –

ответ

1

вы должны ждать, пока транзакция не будет выполнена. Вы не можете запустить его сразу после добавления фрагмента в транзакцию.

.commit(); - это асинхронный вызов.

Из документации

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

В качестве теста вы можете запустить executePendingTransactions(), чтобы немедленно выполнить любую ожидающую операцию.

0

Фрагмент сделки асинхронной задачи и при фиксации, что доза не означает, что она немедленно добавляется, так что вы должны вызвать executePendingTransactions() если вы хотите, сделка происходит сразу

FragmentOne fragmentOne = new FragmentOne(); 
    getSupportFragmentManager().beginTransaction().add(R.id.container, fragmentOne,FRAGMENT_ONE_TAG).addToBackStack(null).commit(); 

getSupportFragmentManager().executePendingTransactions(); 
Смежные вопросы