package org.holoeverywhere.app; import android.content.Context; import android.os.Bundle; import android.support.v4.app._HoloFragment; import android.view.View; import org.holoeverywhere.LayoutInflater; import org.holoeverywhere.addon.IAddon; import org.holoeverywhere.addon.IAddonBasicAttacher; import org.holoeverywhere.addon.IAddonFragment; import java.util.Collection; public class Fragment extends _HoloFragment { private final IAddonBasicAttacher<IAddonFragment, Fragment> mAttacher = new IAddonBasicAttacher<IAddonFragment, Fragment>(this); private LayoutInflater mLayoutInflater; 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 Use {@link #instantiate(Class)} instead. * {@link #instantiate(Context, String)} is sucks, don't use it! */ @Deprecated public static Fragment instantiate(Context context, String fname) { return instantiate(context, fname, null); } /** * @deprecated Use {@link #instantiate(Class, Bundle)} instead. * {@link #instantiate(Context, String, Bundle)} is sucks, don't * use it! */ @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); } } @Override public <T extends IAddonFragment> T addon(Class<? extends IAddon> clazz) { return mAttacher.addon(clazz); } @Override public void addon(Collection<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 Collection<Class<? extends IAddon>> obtainAddonsList() { return mAttacher.obtainAddonsList(); } @Override public void onCreate(final Bundle savedInstanceState) { IAddonBasicAttacher.attachAnnotations(this); mAttacher.inhert(getSupportActivity()); 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 onDestroyView() { performAddonAction(new AddonCallback<IAddonFragment>() { @Override public void justAction(IAddonFragment addon) { addon.onDestroyView(); } }); super.onDestroyView(); } @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); } }