前言:
Fragment类似于一个小片段可以关联Activity完成一些碎片的界面(暂且叫碎片化吧),非常好用。通常一个Activity可以有一个Fragmen他,当然也可以有很多Fragment,当Fragment多的时候就要考虑Fragment嵌套和Fragment优化的问题。
正文:
类似于以上图片的按钮,切换不同的按钮需要切换不同的Fragment,对于这几个Fragment都关联到一个Activity
里面。建议使用add所有的Fragment然后不同Fragment切换的时候hide当前Fragment、show切换的Fragment不要用
rePlace,如果使用了rePlace那么Fragment会重新实例化、执行相关的生命周期的方法,显然这样很耗性能。
FragmentManager fm = getSupportFragmentManager();
switch (checkedId) {
case R.id.home_tab_shijian:
hideAllFragment( fm );
addFragment( fm, shijianFragment );
showFragment( fm, shijianFragment );
rl_main_root.setBackgroundResource(R.drawable.layer_sj_sy_bg);
break;
case R.id.home_tab_rili:
hideAllFragment( fm );
addFragment( fm, riliFragment );
showFragment( fm, riliFragment );
rl_main_root.setBackgroundResource(R.drawable.layer_rl_noad_bg);
break;
case R.id.home_tab_gongju:
hideAllFragment( fm );
addFragment( fm, gongjuFragment );
showFragment( fm, gongjuFragment );
rl_main_root.setBackgroundResource(R.drawable.layer_tool_bg);
break;
case R.id.home_tab_wode:
hideAllFragment( fm );
addFragment( fm, wodeFragment );
showFragment( fm, wodeFragment );
rl_main_root.setBackgroundResource(R.drawable.layer_my_login_is_bg);
break;
}
add创建的Fragment
private void addFragment(FragmentManager fm, Fragment fragment) {
if (!fragment.isAdded()) {
FragmentTransaction ft = fm.beginTransaction();
ft.add( R.id.main_content, fragment );
ft.commit();
}
}
hide当前Fragment
private void hideAllFragment(FragmentManager fm) {
FragmentTransaction ft = fm.beginTransaction();
if (!shijianFragment.isHidden())
ft.hide( shijianFragment );
if (!riliFragment.isHidden())
ft.hide( riliFragment );
if (!gongjuFragment.isHidden()) {
ft.hide( gongjuFragment );
}
if (!wodeFragment.isHidden()) {
ft.hide( wodeFragment );
}
ft.commit();
}
show切换的Fragment
private void showFragment(FragmentManager fm, Fragment fragment) {
FragmentTransaction ft = fm.beginTransaction();
ft.show( fragment );
ft.commit();
}