一.首先声明两个全局变量:
<pre name="code" class="java">
private FragmentManager mManger;
private Fragment mCurrentFragment;
二.然后获得manager管理对象:
mManger = getSupportFragmentManager();
三.添加showAndHide()方法:
private void showAndHide(int contentId, Class<? extends Fragment> clazz) {
//判断当前的fragment和需要替换的fragment是否是统一一个
if (mCurrentFragment != null && mCurrentFragment.getClass().getSimpleName().equals(clazz.getSimpleName())) {
return;
}
//判断fragment有没有添加过
FragmentTransaction transaction = mManger.beginTransaction();
//
Fragment fragment = null;
try {
Fragment fragmentByTag = mManger.findFragmentByTag(clazz.getSimpleName());
if (fragmentByTag != null) {
//显示需要的fragment
transaction.show(fragmentByTag);
//隐藏当前的fragment
transaction.hide(mCurrentFragment);
//让记录当前的fragment赋值为显示的fragment
mCurrentFragment = fragmentByTag;
} else {
//通过无参的 公开的构造函数来创建Fragment实例
fragment = clazz.newInstance();
//当前的Fragment没有添加过 把Fragment添加到manager里面
transaction.add(contentId, fragment, clazz.getSimpleName());
if (mCurrentFragment != null) {
//隐藏当前的Fragment
transaction.hide(mCurrentFragment);
}
//记录当前的Fragment是那个
mCurrentFragment = fragment;
}
transaction.commit();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
四.设置监听事件:
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Class<? extends Fragment> clazz = null;
switch (checkedId) {
case R.id.rb_main_home:
clazz = HomeFragment.class;
break;
case R.id.rb_main_settings:
clazz = SettingsFragment.class;
break;
default:
break;
}
showAndHide(R.id.fl_main_show, clazz);
}
});
五.使用时选择第一个添加的fragment:
mManger = getSupportFragmentManager();
showAndHide(R.id.fl_main_show, HomeFragment.class);