【问题标题】:FragmentManager clean up for .addToBackStackFragmentManager 清理 .addToBackStack
【发布时间】:2019-05-14 19:44:17
【问题描述】:

无论如何我可以让它更干净一点吗?我知道什么时候 query = "" 我在主菜单中,因此返回应该关闭应用程序。

        if (query == "") {
            fragmentManager.beginTransaction()
                    .replace(containerId, fragment, tag)
                    .commitAllowingStateLoss();
        } else {
            fragmentManager.beginTransaction()
                    .replace(containerId, fragment, tag)
                    .addToBackStack(null)
                    .commitAllowingStateLoss();
        }

【问题讨论】:

    标签: java android navigation fragmentmanager


    【解决方案1】:

    是的,您可以从活动中一一清理片段,这是代码...

       public static void clearBackStack() {
            FragmentManager fm = mainActivity.getSupportFragmentManager();
            for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
                 fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }
        }
    

    【讨论】:

    • 谢谢,你能解释一下它如何与我已有的代码一起工作
    • 是的,getBackStackEntryCount()会给出栈中的fragment总数,会通过popBackStack()方法一个一个移除
    【解决方案2】:

    好的,这对我来说更好。虽然我很欣赏上面的答案。

        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(containerId, fragment, tag);
         if (query != "") {
             transaction.addToBackStack(null);
         }
         transaction.commitAllowingStateLoss();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 2011-07-15
      • 2019-02-14
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多