package com.copy.jianshuapp.uilayer.base; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.support.annotation.IdRes; /** * FragmentManager辅助类 * @version imkarl 2017-03 */ public class FragmentManagerHelper { private final Object mComponent; public FragmentManagerHelper(Fragment fragment) { this.mComponent = fragment; } public FragmentManagerHelper(Activity activity) { this.mComponent = activity; } public FragmentManager getFragmentManager() { if (mComponent == null) { return null; } if (mComponent instanceof Fragment) { return ((Fragment) mComponent).getFragmentManager(); } else if (mComponent instanceof Activity) { return ((Activity) mComponent).getFragmentManager(); } return null; } public FragmentTransactionHelper beginTransaction() { return new FragmentTransactionHelper(this); } public static boolean isAdded(Fragment fragment) { // FIXME return fragment.isAdded() || fragment.getTag() != null || fragment.getId() != 0; } public static String createTag(Fragment fragment) { return createTag(fragment.getClass()); } public static String createTag(Class<? extends Fragment> clazz) { return clazz.getName(); } public <T extends Fragment> T find(@IdRes int id) { FragmentManager fm = getFragmentManager(); return (T) fm.findFragmentById(id); } public <T extends Fragment> T find(String tag) { FragmentManager fm = getFragmentManager(); return (T) fm.findFragmentByTag(tag); } public <T extends Fragment> T find(Class<T> fragmentClass) { return find(createTag(fragmentClass)); } public <T extends Fragment> T findOrCreate(Class<T> fragmentClass) { return findOrCreate(fragmentClass, createTag(fragmentClass)); } public <T extends Fragment> T findOrCreate(Class<T> fragmentClass, String tag) { T fragment = find(tag); if (fragment == null) { try { fragment = fragmentClass.newInstance(); } catch (Exception ignored) { } } return fragment; } }