Android FragmentManager:getBackStackEntryCount()和popBackStack()

时间:2013-10-21 14:06:24

标签: android

我有一个方法可以删除所有后台堆栈

public void removeAllInBackStack(FragmentManager fm) {
    int len = fm.getBackStackEntryCount();
    for (int i = 0; i < len; i++) {
        fm.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}

但是当我跑的时候。 len的值总是> 0,但popBackStack有java.lang.NullPointerException。

我尝试了宽度popBackStack()和popBackStack(id,FragmentManager.POP_BACK_STACK_INCLUSIVE)。

这是logcat:

android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:676)
    android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1496)
    android.app.FragmentManagerImpl$3.run(FragmentManager.java:464)
    android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1401)
    android.app.Activity.performResume(Activity.java:5076)
    android.app.ActivityThread.performResumeActivity(ActivityThread.java:2566)
    android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2604)
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
    android.os.Handler.dispatchMessage(Handler.java:99)
    android.os.Looper.loop(Looper.java:137)
    android.app.ActivityThread.main(ActivityThread.java:4747)
    java.lang.reflect.Method.invokeNative(Native Method)
    java.lang.reflect.Method.invoke(Method.java:511)
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:8)

我必须在我的应用程序中执行相同的操作,这是我如何做到的:

try {
     fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
     fm.executePendingTransactions();
    } catch (Exception e) {
      e.printStackTrace();
    }

Dianne Hackborn在这篇文章中解释了正确的方法: https://groups.google.com/forum/#!topic/android-developers/0qXCA9rW7EI

如链接中所述:popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);应该弹出整个后筹码。