android 加载 fragment 工具类
不同项目直接拷贝,要求是support v4包下的fragment
/**
* 加载fragment的工具类
* 静态类方法
*/
public final class FragmentUtil {
/**
* 初始化fragment
*
* @param manager fragment管理
* @param layoutId 需要填充的布局id
* @param fragmentClassName fragment
* @param isReplace 是否需要替换
* @return fragment
*/
public static Fragment initFragment(FragmentManager manager, int layoutId, String fragmentClassName, boolean isReplace) {
if (manager == null || manager.isDestroyed()) {
return null;
}
FragmentTransaction transaction = manager.beginTransaction();
if (isReplace) {
//需要强制替换,不需要判断
Fragment fragment = Fragment.instantiate(DemoApplication.getContext(), fragmentClassName);
transaction.replace(layoutId, fragment);
transaction.commitNowAllowingStateLoss();
return fragment;
} else {
Fragment fragment = manager.findFragmentById(layoutId);
if (fragment == null || fragment.isDetached() || !isSameFragment(fragment, fragmentClassName)) {
//需要强制替换,不需要判断
Fragment newFragment = Fragment.instantiate(DemoApplication.getContext(), fragmentClassName);
transaction.replace(layoutId, newFragment);
transaction.commitNowAllowingStateLoss();
return newFragment;
} else {
return fragment;
}
}
}
/**
* 返回是否是同一个fragment对象实例
*
* @param fragment fragment
* @param fragmentClassName 类名
* @return true 是
*/
private static boolean isSameFragment(Fragment fragment, String fragmentClassName) {
if (fragment == null || fragmentClassName == null || fragmentClassName.length() == 0) {
return false;
}
if (fragmentClassName.equals(fragment.getClass().getName())) {
return true;
}
return false;
}
}
使用方法
FragmentUtil.initFragment(getSupportFragmentManager(), R.id.parking_content, ParkingFragment.class.getName(), true);