Невозможно удалить фрагмент из 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);
Другие вопросы по тегам