当前位置:  开发笔记 > 编程语言 > 正文

尝试避免向backStack添加两次相同的片段,popBackStackImmediate总是返回false

如何解决《尝试避免向backStack添加两次相同的片段,popBackStackImmediate总是返回false》经验,为你挑选了1个好方法。

我正在尝试使用此方法避免向backStack添加相同的片段:

public static void replaceFragment(FragmentManager fragmentManager, Fragment fragment, Boolean addToBackStack) {
        String backStateName = fragment.getClass().getName();
        boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);

        if (addToBackStack && !fragmentPopped && fragmentManager.findFragmentByTag(backStateName) == null) {
            fragmentManager
                    .beginTransaction()
//                    .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
                    .replace(R.id.container, fragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(backStateName) // was 'backStateName'
                    .commit();
        } else {
            if (!addToBackStack)
                fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            fragmentManager
                    .beginTransaction()
//                    .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
                    .replace(R.id.container, fragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .disallowAddToBackStack()
                    .commit();
        }
    }

导航抽屉包含:profilePhoto打开的ImageView和打开的ProfileMainFragment几个类别MainFragmentCategory.Boolean addToBackStackfalse当片段从choosen navigationDrawerMenu并且true当片段内choosen(从移动MainFragmentCategoryDetialFragmentCategory),或者点击profilePhotonavigationDrawer.

fragmentPopped总是false,为什么会这样?即使我profilePhoto再次点击profilePhoto进入navigationDrawer.它应该避免将它添加到backStack第二(以及第三和第四......)时间,但事实并非如此.

知道我怎么能做对吗?



1> Joshua..:

您可以在替换片段之前添加以下代码.

// Replace fragmentCotainer with your container id
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragmentCotainer);
// Return if the class are the same
if(currentFragment.getClass().equals(fragment.getClass())) return;

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有