侧边抽屉Navigation点击,在同一个activity中切换不同的fragment,fragment显示空白

侧边抽屉Navigation点击,在同一个activity中切换不同的fragment,fragment显示空白

你需要注意这两两句代码的顺序
removeBeforeFragments();
transaction = manager.beginTransaction();

你注意到,这两句代码正确的顺序使先remove操作,再获得transaction,我之前就把顺序搞反了,然年后我就试着先调试其他代码过后再回过头来解决这个问题,但是为什么会这样呢?

大概的意思就是:
remove里面有上一个transaction实例,上一个的transaction移除当前阶段的fragment使正确的,若是你把顺序搞反了,显示获得新得transaction实例再去执行remove操作,那是不行的,在加载的时候你已经使用新得transaction移除了接下来需要替换的fragment,那么你下次显示就是空白的.

我未完善的fragment xml布局,那个时候我觉得使加载正常,其实使么有加载出来,加载的仅仅是你在创建布局时的静态预览效果的布局,你若是再切换fragment的时候修改这个布局,也会是加载不出来的,可真是个障眼法

(个人理解,有误欢迎评论纠正,马上更改,谢谢!)

这个是正确的代码

 /**
     * navigation item 选择事件
     */
    private void setNavigationItemClick() {
        mNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                removeBeforeFragments();
                transaction = manager.beginTransaction();
                switch (menuItem.getItemId()){
                    case R.id.menu_bank_card:
                    {
                        Log.d(TAG, "onNavigationItemSelected: black");
                        transaction.replace(R.id.fl_main_fragment,Comment.fragmentMap.get(Comment.BANK_CARD_FRAGMENT));
                        Comment.currentFragment = Comment.BANK_CARD_FRAGMENT;
                        mTitle.setText(R.string.bankcard);
                    }break;
                    case R.id.menu_driver_card:
                    {
                        Log.d(TAG, "onNavigationItemSelected: driver");
                        transaction.replace(R.id.fl_main_fragment,Comment.fragmentMap.get(Comment.DRIVER_CARD_FRAGMENT));
                        Comment.currentFragment = Comment.DRIVER_CARD_FRAGMENT;
                        mTitle.setText(R.string.drivercard);

                    }break;
                    case R.id.menu_id_card:
                    {
                        Log.d(TAG, "onNavigationItemSelected: id");
                        transaction.replace(R.id.fl_main_fragment,Comment.fragmentMap.get(Comment.ID_CARD_FRAGMENT));
                        Comment.currentFragment = Comment.ID_CARD_FRAGMENT;
                        mTitle.setText(R.string.idcard);

                    }break;
                    case R.id.menu_post_card:
                    {
                        Log.d(TAG, "onNavigationItemSelected: post");
                        transaction.replace(R.id.fl_main_fragment,Comment.fragmentMap.get(Comment.POST_CARD_FRAGMENT));
                        Comment.currentFragment = Comment.POST_CARD_FRAGMENT;
                        mTitle.setText(R.string.postcard);

                    }break;
                    case R.id.menu_others:
                    {
                        Log.d(TAG, "onNavigationItemSelected: others");
                        transaction.replace(R.id.fl_main_fragment,Comment.fragmentMap.get(Comment.OTHER_CARD_FRAGMENT));
                        Comment.currentFragment = Comment.OTHER_CARD_FRAGMENT;
                        mTitle.setText(R.string.otherscard);

                    }break;
                    default:
                        break;
                }
                transaction.commit();
                mDrawer.closeDrawers();
                return true;
            }
        });
    }

 
  /**
     * 移除先前得fragment
     */
    private void removeBeforeFragments() {
        for (String key: Comment.fragmentMap.keySet()) {
            if (key != Comment.currentFragment) {
                transaction.hide(Comment.fragmentMap.get(key));
                transaction.remove(Comment.fragmentMap.get(key));
            }
        }
    }
发布了89 篇原创文章 · 获赞 13 · 访问量 7728

猜你喜欢

转载自blog.csdn.net/printf123scanf/article/details/103267420