底部导航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; } } }); }
相关文章推荐
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- replace方式与ViewPager方式切换Fragment
- Fragment切换 replace 和 add 的比较 以及最佳方案
- Android UI-实现底部切换标签之方式三 ──Activity(底部采用FragmentTabHost)添加5个子Fragment
- Android个人学习笔记-底部导航切换Fragment的实现
- android基于Fragment实现底部导航切换
- Android UI-实现底部切换标签之方式一 ──fragment(底部采用radioGroup+radiobutton)添加5个子fragment
- FragmentTabHost+ViewPage实现底部导航窗口切换
- Android 底部导航 用fragment的方式
- Android UI-实现底部切换标签之方式二 ──Activity(底部采用radioGroup+rutton)添加5个子fragment
- 主流移动应用开发框架(2)——fragment+fragmenttabhost实现底部选项卡导航(可滑动切换)
- Android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- 关于fragmentTabhost点击底部切换不了的问题
- FragmentTransaction add 和 replace 区别
- 使用ViewPager和Fragment同时实现点击底部Tab切换和手势滑动切换Fragment