Fragment切换的方法
/***
* 显示Fragment
*
* @param cla 要显示的Fragment的Class
*
*这个方法可以应对旋转屏幕时,出现多个Fragment重叠的bug
*但是无法解决旋转屏幕重新加载activity造成的Fragment又显示第一个
*/
private void showFragment(Class cla) {
String fTAG = cla.getName();
manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentByTag(fTAG);
Fragment currentFragment = manager.findFragmentByTag(BaseFragment.CurrentTAG);
if (null != currentFragment && currentFragment.getClass() == cla) {
return;
}
transaction = manager.beginTransaction();
if (null == fragment) {
try {
Log.e(TAG, "TAG为 " + fTAG + " 的Fragment为null");
fragment = (Fragment) Class.forName(fTAG).newInstance();
transaction.add(R.id.fragment_frameloyout, fragment
, fTAG);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
if (null != currentFragment) {
transaction.hide(currentFragment);
Log.v(TAG, "currentfragment不为null:" + currentFragment.getClass().getSimpleName());
} else {
Log.e(TAG, "currentfragment为null");
}
transaction.show(fragment)
.commit();
BaseFragment.CurrentTAG = fragment.getTag();
Log.v(TAG, "展示新的Fragment: " + fragment.getTag());
}