android - 清除 fragment 返回栈

标签 android android-fragments

我知道在 stackoverflow 上有很多关于此的问题,但我认为我的问题是独一无二的。

这是我的代码:

public void emptyBackStackNow() {
    FragmentManager fragmentManager = act.getFragmentManager();


    Log.i("Fragments count on the stack: ", fragmentManager.getBackStackEntryCount() + "");
    for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {

        String fragmentTag = fragmentManager.getBackStackEntryAt(i).getName();
        Log.i("Fragment on the stack: ", fragmentTag);

    }

    Log.i("Fragments count on the stack, right before popping: ", fragmentManager.getBackStackEntryCount() + "");
    for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {

        fragmentManager.popBackStackImmediate();
        Log.i("Fragment popped from stack: ", "just popped: "+i+".");

    }

    Log.i("Fragments count on the stack after popping: ", fragmentManager.getBackStackEntryCount() + "");
    for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {

        String fragmentTag = fragmentManager.getBackStackEntryAt(i).getName();
        Log.i("Fragments still on the stack:", fragmentTag);

    }

}

还有奇怪的日志:

2-05 10:30:10.649: I/Fragments count on the stack:(25133): 14
12-05 10:30:10.649: I/Fragment on the stack:(25133): ContactFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): IdopontKeresFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): IdopontjaimFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): LeleteimFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): TeethbrushFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): MessageListFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): IdopontjaimFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): ContactFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): IdopontKeresFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): IdopontjaimFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): SegedanyagokFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): ContactFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): ASZFFragment
12-05 10:30:10.649: I/Fragment on the stack:(25133): MessageListFragment
12-05 10:30:10.649: I/Fragments count on the stack, right before popping:(25133): 14
12-05 10:30:10.729: I/Fragment popped from stack:(25133): just popped: 0.
12-05 10:30:10.739: I/Fragment popped from stack:(25133): just popped: 1.
12-05 10:30:10.739: I/Fragment popped from stack:(25133): just popped: 2.
12-05 10:30:10.749: I/Fragment popped from stack:(25133): just popped: 3.
12-05 10:30:10.749: I/Fragment popped from stack:(25133): just popped: 4.
12-05 10:30:10.779: I/Fragment popped from stack:(25133): just popped: 5.
12-05 10:30:10.789: I/Fragment popped from stack:(25133): just popped: 6.
12-05 10:30:10.789: I/Fragment popped from stack:(25133): just popped: 7.
12-05 10:30:10.789: I/Fragments counton the stack after popping:(25133): 7
12-05 10:30:10.789: I/Fragments still on the stack:(25133): ContactFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): IdopontKeresFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): IdopontjaimFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): LeleteimFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): TeethbrushFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): MessageListFragment
12-05 10:30:10.789: I/Fragments still on the stack:(25133): IdopontjaimFragment

您可以清楚地看到,第二个 for 循环没有遍历整个堆栈。

简单的问题:这怎么可能?

最佳答案

这是因为,当你在这个循环中弹出 fragment 时——

    for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) 
    {
        fragmentManager.popBackStackImmediate();
        Log.i("Fragment popped from stack: ", "just popped: "+i+".");

    }

然后,“fragmentManager.getBackStackEntryCount()”将返回总计数,比之前的计数少一。要克服这个问题,你必须这样做-

           int count = fragmentManager.getBackStackEntryCount();
           for (int i = 0; i < count; i++) 
            {
                fragmentManager.popBackStackImmediate();
                Log.i("Fragment popped from stack: ", "just popped: "+i+".");

            }

关于android - 清除 fragment 返回栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396316/

相关文章:

android - 从网络下载文本文件

java - 如何使用 Firebase Cloud Messaging 在前台显示多个通知

c# - Xamarin Android 数据绑定(bind)与 MVVM Light

android - 如何从android中的webservice快速加载数据?

Java/Android 网络服务器 : multipart upload from browser to the server via HttpRequestHandler

Android:从DialogFragment回调 fragment ?

android - 为什么清除 FLAG_TRANSLUCENT_STATUS 标志后我的布局变得困惑?

android - java.lang.IllegalStateException : RecyclerView has no LayoutManager in Fragment 错误

带有 fragment 或 Activity 的 Android Studio 抽屉导航

Android - 如何隐藏 PreferenceFragment 中的控件