Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法使用popBackStack()或remove()从backstack中删除片段_Android_Android Fragments_Fragment_Back Stack - Fatal编程技术网

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);