Я работаю над приложением для Android и столкнулся с ошибкой, связанной с Fragments и FragmentTransactions. Я создал пример приложения, чтобы продемонстрировать проблему. Вот что я делаю:
add
Fragment1
доfragmentSpace
, без добавления в стопку.replace
fragmentSpace
сFragment2
, добавляя в стопку как"beginning"
.add
Fragment3
вfragmentSpace2
(который находится внутриFragment2
), без добавления в стопку.replace
fragmentSpace2
сFragment4
, добавляя в стопку какnull
.- Вызовите
getFragmentManager().popBackStack("beginning", FragmentManager.POP_BACK_STACK_INCLUSIVE);
, чтобы попытаться отменить все транзакции, что должно привести к тому, что пользователь снова увидит толькоFragment1
.
Однако приложение вылетает на шаге 5 с этой ошибкой:
java.lang.IllegalArgumentException: No view found for id 0x7f090004 (me.MitchT.testfragmenttransactions:id/fragmentSpace2) for fragment Fragment3{7f35cb6 #2 id=0x7f090004}
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:886)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:1645)
...
Я обнаружил, что если я добавлю шаг 3 в backstack, шаг 5 больше не приведет к сбою приложения, и больше не будет ошибки. Почему?
Проблема, с которой я столкнулся при добавлении шага 3 в backstack, заключается в том, что я хочу, чтобы пользователь мог нажать кнопку «Назад» после добавления Fragment3
и вернуться к Fragment1
. Если я добавлю его в стопку, то когда пользователь нажмет кнопку "Назад", он удалит Fragment3
, но Fragment2
все еще будет виден, поэтому он должен нажать кнопку "Назад" еще раз. Я пытаюсь избежать этого поведения с двойной кнопкой возврата.
Я не считал необходимым публиковать код для каждого отдельного файла в примере приложения по этому вопросу, поэтому вместо этого я создал суть.
Итак, я предполагаю, что мои вопросы:
- Почему я получаю эту ошибку?
- Почему я не получаю сообщение об ошибке после добавления шага 3 в стопку?
- Есть ли лучший способ «вернуться к началу» или вернуться к двум фрагментам за раз?
Спасибо!
popbackstack()
. - person Raghunandan   schedule 18.08.2015