Невозможно удалить фрагмент из backstack с помощью popBackStack() или remove()
У меня есть 2 фрагмента: SportsList и Workout
Я поместил фрагмент SportsList как это:
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("SportsList").replace(R.id.fragment, sportsListFragment);
А потом я поставил тренировки
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("Workout").replace(R.id.fragment, workoutFragment);
я использую replace()
метод так SportsList должен быть удален, но когда я звоню popBackStackImmediate()
это остается там.
Поэтому я попытался удалить SportsList вручную во фрагменте тренировки, когда янажимал кнопку. Итак, я делаю это:
FragmentManager fm = getActivity().getSupportFragmentManager();
Fragment oldFragment = fm.findFragmentByTag("SportsList");
fm.beginTransaction().remove(oldFragment).commit();
Но это дает мне следующую ошибку:
ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: main java.lang.NullPointerException: Попытка записи в поле 'int android.support.v4.app.Fragment.mNextAnim' по нулевой ссылке на объект в android.support.v4.app.BackStackRecord.run(BackStackRecord.java).:770) на android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) на android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) на android.os.Handback.handCall (Handler.java:739) на android.os.Handler.dispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java:135) на android.app.ActivityThread.main(ActivityThread.java:5254) в java.lang.reflect.Method.invoke(собственный метод) в java.lang.reflect.Method.invoke(Method.java:372) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. Java:903) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Я также попытался сделать это:
fm.popBackStack("SportsList", 0);
и это:
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
и это:
fm.popBackStack("SportsList", FragmentManager.POP_BACK_STACK_INCLUSIVE);
Но они удаляют текущий фрагмент (фрагмент тренировки) вместо фрагментаSportsList. У меня сейчас нет идей. Кроме того:
ft.replace(R.id.fragment, sportsListFragment);
все еще добавляя фрагмент SportsList в backstack. Как это могло быть возможно?
1 ответ
Попробуй это:
ft.addToBackStack("SportsList").replace(R.id.fragment, sportsListFragment).addToBackStack(null);