android 加載 fragment 工具類

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章