Skip to content

Instantly share code, notes, and snippets.

@mlc
Forked from JakeWharton/ContractFragment.java
Created May 16, 2012 16:33
Show Gist options
  • Save mlc/2711951 to your computer and use it in GitHub Desktop.
Save mlc/2711951 to your computer and use it in GitHub Desktop.
Base fragment to ensure the parent activity implements a contract interface.
/* Base fragment to ensure the parent activity implements a contract interface. */
public abstract class ContractFragment<T> extends Fragment {
private T mContract;
@Override
public void onAttach(Activity activity) {
if (!((Class)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]).isAssignableFrom(activity.getClass()))
throw new IllegalStateException(activity.getClass().getSimpleName()
+ " does not implement " + getClass().getSimpleName() + "'s contract interface.");
//noinspection unchecked
contract = (T)activity;
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
mContract = null;
}
public final T getContract() {
return mContract;
}
}
/* Example fragment showing usage of ContractFragment. */
public class MyCoolFragment extends ContractFragment<MyCoolFragment.Contract> {
public interface Contract {
void sayHi(String message);
}
public void somethingHappened() {
getContract().sayHi("Hi, Mom!");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment