Fragment 通过show和hide 切换界面
开发项目过程中我们有很多需要Fragment 碎片化来实现多个页面的替换,像微信一样通过点击底部菜单实现界面切换具体该如何实现呢代码如下:
工具类
public class ViewUtils {
public static BaseFragment createFragment(Class<?> clazz) {
BaseFragment resultFragment = null;
String className = clazz.getName();
try {
try {
resultFragment = (BaseFragment) Class.forName(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return resultFragment;
}
}
逻辑代码
private Fragment mCurrentFragment=null;
FragmentManager mFragmentManager = getSupportFragmentManager();//初始化fragmentManager
private void switchFragment(int index) {
Fragment to = mFragmentManager.findFragmentByTag(index+"");
if (to == null) {
if (index == 0)
to = ViewUtils.createFragment(homefragment.class);
else if (index == 1)
to = ViewUtils.createFragment(bookfragment.class);
else if (index == 2)
to = ViewUtils.createFragment(tongzhifragment.class);
else if(index == 3)
to = ViewUtils.createFragment(mefragment.class);
}
if (to.isAdded()) {
mFragmentManager.beginTransaction().hide(mCurrentFragment).show(to).commit();
} else {
if (mCurrentFragment != null)
mFragmentManager.beginTransaction().hide(mCurrentFragment).add(R.id.f_content, to, index + "").commit();
else
mFragmentManager.beginTransaction().add(R.id.f_content, to, index + "").commit();
}
mCurrentFragment = to;
}
//调用方法 switchFragment(0);
第一次进入界面时点击第1个fragment 未被依附added mCurrentFragment 也是null 所以先添加提交
mFragmentManager.beginTransaction().add(R.id.f_content, to, index + “”).commit();
点击第二个界面的时候第2个fragment也未被added 但mCurrentFragment 已不为null被赋值第1个fragment所以 mFragmentManager.beginTransaction().hide(mCurrentFragment).add(R.id.f_content, to, index + “”).commit();
当从第二个界面跳转到第一个界面时 第二个界面(也就是当前界面已经依附在了Activity 中)所以
if (to.isAdded()) {
mFragmentManager.beginTransaction().hide(mCurrentFragment).show(to).commit();}