借鉴了某位大神的代码,总结了android中fragment的切换,可能有更好的方式,这只是其中一种。具体看代码
FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
//判断当前的Fragment是否为空,不为空则隐藏
if (null != mCurrentFrgment) {
ft.hide(mCurrentFrgment);
}
//先根据Tag从FragmentTransaction事物获取之前添加的Fragment
Fragment fragment =getSupportFragmentManager().findFragmentByTag(list.get(index).getClass().getName());
if (null == fragment) {
//如fragment为空,则之前未添加此Fragment。便从集合中取出
fragment = list.get(index);
}
mCurrentFrgment = fragment;
//判断此Fragment是否已经添加到FragmentTransaction事物中
if (!fragment.isAdded()) {
ft.add(R.id.framelayout, fragment,fragment.getClass().getName());
} else {
ft.show(fragment);
}
ft.commit();
总结:先创建一个fragment作为当前的fragment,判断是否为空,若不为空,则隐藏(显示其他fragment);接着拿出对应切换的fragment(通过findFragmentByTag方式),如果为空,则表示是第一次显示,从集合中拿出;若不为空,则将其赋值给当前fragment,并且判断是否已经加入到事务中,没有,则加入,有,则显示;最后提交事务