Android 无法使用popBackStack()或remove()从backstack中删除片段
我有两个片段:运动列表和训练Android 无法使用popBackStack()或remove()从backstack中删除片段,android,android-fragments,fragment,back-stack,Android,Android Fragments,Fragment,Back Stack,我有两个片段:运动列表和训练 FragmentTransaction ft = fm.beginTransaction(); ft.addToBackStack("Workout").replace(R.id.fragment, workoutFragment); 我把运动列表片段放在下面: FragmentTransaction ft = fm.beginTransaction(); ft.addToBackStack("SportsList").replace(R.id.fragment,
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack("Workout").replace(R.id.fragment, workoutFragment);
我把运动列表片段放在下面:
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,但当我调用popbackackimmediate()
时,它仍保留在那里
因此,当我点击一个按钮时,我尝试在训练片段中手动删除运动列表。所以我这样做:
FragmentManager fm = getActivity().getSupportFragmentManager();
Fragment oldFragment = fm.findFragmentByTag("SportsList");
fm.beginTransaction().remove(oldFragment).commit();
但这给了我以下错误:
致命异常:主
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.Handler.handleCallback(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);
这是:
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fm.popBackStack("SportsList", FragmentManager.POP_BACK_STACK_INCLUSIVE);
但是他们正在删除当前的片段(训练片段),而不是运动列表片段。我现在没有主意了。除此之外:
ft.replace(R.id.fragment, sportsListFragment);
仍在向后台添加运动列表片段。这怎么可能呢?试试这个:
ft.addToBackStack("SportsList").replace(R.id.fragment, sportsListFragment).addToBackStack(null);