package com.forfan.bigbang.view; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.NonNull; import android.view.View; /** * Created by Rey on 1/12/2015. */ public class DialogFragment extends android.support.v4.app.DialogFragment{ /** * Interface definition for passing style data. */ public interface Builder{ /** * Get a Dialog instance used for this fragment. * @param context A Context instance. * @return The Dialog will be used for this fragment. */ public Dialog build(Context context); /** * Handle click event on Positive Action. */ public void onPositiveActionClicked(DialogFragment fragment); /** * Handle click event on Negative Action. */ public void onNegativeActionClicked(DialogFragment fragment); /** * Handle click event on Neutral Action. */ public void onNeutralActionClicked(DialogFragment fragment); /** * Handle OnCancel event of dialog. * @param dialog */ public void onCancel(DialogInterface dialog); /** * Handle OnDismiss event of dialog. * @param dialog */ public void onDismiss(DialogInterface dialog); } protected static final String ARG_BUILDER = "arg_builder"; protected Builder mBuilder; private View.OnClickListener mActionListener = new View.OnClickListener() { @Override public void onClick(View v) { if(mBuilder == null) return; if(v.getId() == Dialog.ACTION_POSITIVE) mBuilder.onPositiveActionClicked(DialogFragment.this); else if(v.getId() == Dialog.ACTION_NEGATIVE) mBuilder.onNegativeActionClicked(DialogFragment.this); else if(v.getId() == Dialog.ACTION_NEUTRAL) mBuilder.onNeutralActionClicked(DialogFragment.this); } }; public static DialogFragment newInstance(Builder builder){ DialogFragment fragment = new DialogFragment(); fragment.mBuilder = builder; return fragment; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = mBuilder == null ? new Dialog(getActivity()) : mBuilder.build(getActivity()); dialog.positiveActionClickListener(mActionListener) .negativeActionClickListener(mActionListener) .neutralActionClickListener(mActionListener); return dialog; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState != null && mBuilder == null) mBuilder = savedInstanceState.getParcelable(ARG_BUILDER); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if(mBuilder != null && mBuilder instanceof Parcelable) outState.putParcelable(ARG_BUILDER, (Parcelable)mBuilder); } @Override public void onDestroyView() { android.app.Dialog dialog = getDialog(); if(dialog != null && dialog instanceof Dialog) ((Dialog)dialog).dismissImmediately(); super.onDestroyView(); } @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); mBuilder.onCancel(dialog); } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); mBuilder.onDismiss(dialog); } }