Skip to content

Instantly share code, notes, and snippets.

@JakeWharton
Created May 6, 2012 09:12
Show Gist options
  • Star 57 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save JakeWharton/2621173 to your computer and use it in GitHub Desktop.
Save JakeWharton/2621173 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) {
try {
mContract = (T)activity;
} catch (ClassCastException e) {
throw new IllegalStateException(activity.getClass().getSimpleName()
+ " does not implement " + getClass().getSimpleName() + "'s contract interface.", e);
}
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!");
}
}
@rpattabi
Copy link

Shocked to see mContract in @JakeWharton's code. I thought he is totally against Hungarian notation..

Oh I see, that was 7 years ago. Forgivable! :--)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment