package org.holoeverywhere.app; import java.util.List; import org.holoeverywhere.LayoutInflater; import org.holoeverywhere.addon.IAddon; import org.holoeverywhere.addon.IAddonBasicAttacher; import org.holoeverywhere.addon.IAddonFragment; import android.content.Context; import android.os.Bundle; import android.support.v4.app._HoloFragment; import android.view.View; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.ActionMode.Callback; public class Fragment extends _HoloFragment { public static <T extends Fragment> T instantiate(Class<T> clazz) { return instantiate(clazz, null); } public static <T extends Fragment> T instantiate(Class<T> clazz, Bundle args) { try { T fragment = clazz.newInstance(); if (args != null) { args.setClassLoader(clazz.getClassLoader()); fragment.setArguments(args); } return fragment; } catch (Exception e) { throw new InstantiationException("Unable to instantiate fragment " + clazz + ": make sure class name exists, is public, and has an" + " empty constructor that is public", e); } } @Deprecated public static Fragment instantiate(Context context, String fname) { return instantiate(context, fname, null); } @SuppressWarnings("unchecked") @Deprecated public static Fragment instantiate(Context context, String fname, Bundle args) { try { return instantiate((Class<? extends Fragment>) Class.forName(fname, true, context.getClassLoader()), args); } catch (Exception e) { throw new InstantiationException("Unable to instantiate fragment " + fname + ": make sure class name exists, is public, and has an" + " empty constructor that is public", e); } } private final IAddonBasicAttacher<IAddonFragment, Fragment> mAttacher = new IAddonBasicAttacher<IAddonFragment, Fragment>(this); private LayoutInflater mLayoutInflater; @Override public <T extends IAddonFragment> T addon(Class<? extends IAddon> clazz) { return mAttacher.addon(clazz); } @Override public void addon(List<Class<? extends IAddon>> classes) { mAttacher.addon(classes); } @Override public <T extends IAddonFragment> T addon(String classname) { return mAttacher.addon(classname); } @Override public LayoutInflater getLayoutInflater() { if (mLayoutInflater == null) { mLayoutInflater = getSupportActivity().getLayoutInflater(). obtainFragmentChildInflater(this); } return mLayoutInflater; } @Override public boolean isAddonAttached(Class<? extends IAddon> clazz) { return mAttacher.isAddonAttached(clazz); } @Override public void lockAttaching() { mAttacher.lockAttaching(); } @Override public List<Class<? extends IAddon>> obtainAddonsList() { return mAttacher.obtainAddonsList(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mAttacher.reset(); addon(activity.obtainAddonsList()); } @Override public void onCreate(final Bundle savedInstanceState) { lockAttaching(); performAddonAction(new AddonCallback<IAddonFragment>() { @Override public void justAction(IAddonFragment addon) { addon.onPreCreate(savedInstanceState); } }); super.onCreate(savedInstanceState); performAddonAction(new AddonCallback<IAddonFragment>() { @Override public void justAction(IAddonFragment addon) { addon.onCreate(savedInstanceState); } }); } @Override public void onViewCreated(final View view, final Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); performAddonAction(new AddonCallback<IAddonFragment>() { @Override public void justAction(IAddonFragment addon) { addon.onViewCreated(view, savedInstanceState); } }); } @Override public boolean performAddonAction(AddonCallback<IAddonFragment> callback) { return mAttacher.performAddonAction(callback); } @Override public ActionMode startActionMode(Callback callback) { return getSupportActivity().startActionMode(callback); } }