您的位置:首页 > 移动开发 > Android开发

底部导航fragment切换方式由replace更改为add

2018-01-23 17:53 369 查看
这是之前的APP主界面bottomTab的四个fragment导航的切换处理:

private HashMap<String, BaseFragment> mFragmentMap;

private Fragment currentFragment;

mFragmentMap = new HashMap<>();
serviceFragment = ServiceFragment.newInstance("ServiceFragment");
rentFragment = RentFragment.newInstance("RentFragment");
homeFragment = HomeFragment.newInstance("HomeFragment");

if (mFragmentMap != null) {
    mFragmentMap.put("home", homeFragment);
    mFragmentMap.put("service", sericeFragment);
    mFragmentMap.put("rent", rentFragment);
    mFragmentMap.put("my", myFragment);
}

 private void handleBottomEvent() {
        mainTabRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.tab_cj:
                        setCurrentFragment("home");
                        break;
                    case R.id.tab_fw:
                        setCurrentFragment("service");
                        break;
                    case R.id.tab_nl:
                        setCurrentFragment("rent");
                        break;
                    case R.id.tab_wd:
                        setCurrentFragment("my");
                        break;
                }
            }
        });
    }

private void setCurrentFragment(String key) {
        CURRENTKEY = key;
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.revision_content_frame, mFragmentMap.get(key))
                .commitAllowingStateLoss();
    }

优化之后的切换处理:

private void setCurrentFragment(Fragment targetFragment, String tag) {
    
        CURRENTKEY = tag;
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        if (!targetFragment.isAdded()) {
            if(currentFragment != null) {
                transaction.hide(currentFragment);
            }
            transaction
                  
                    .add(R.id.revision_content_frame, targetFragment)
                    .commit();
        } else {
            transaction
                    .hide(currentFragment)
                    .show(targetFragment)
                    .commit();
        }
        currentFragment = targetFragment;
    }

private void handleBottomEvent() {
        mainTabRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.tab_cj:
                        setCurrentFragment(homeFragment,"home");
                        break;
                    case R.id.tab_fw:
                        setCurrentFragment(serviceFragment,"service");
                        break;
                    case R.id.tab_nl:
                        setCurrentFragment(rentFragment,"rent");
                        break;
                    case R.id.tab_wd:
                        setCurrentFragment(myFragment,"my");
                        break;
                }
            }
        });
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐