package com.example.dialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import com.example.R; public class SimpleDialogFragment extends DialogFragment { private static final String ARGUMENT_EXAMPLE = "example"; private String mExample; private SimpleDialogListener mListener; public interface SimpleDialogListener { void onSimpleDialogPositiveClick(DialogFragment dialog); void onSimpleDialogNegativeClick(DialogFragment dialog); } public static SimpleDialogFragment newInstance(String example) { SimpleDialogFragment fragment = new SimpleDialogFragment(); // arguments Bundle arguments = new Bundle(); arguments.putString(ARGUMENT_EXAMPLE, example); fragment.setArguments(arguments); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCancelable(true); setRetainInstance(true); // handle fragment arguments Bundle arguments = getArguments(); if(arguments != null) { handleArguments(arguments); } // set callback listener try { mListener = (SimpleDialogListener) getTargetFragment(); } catch(ClassCastException e) { throw new ClassCastException(getTargetFragment().toString() + " must implement " + SimpleDialogListener.class.getName()); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // cancelable on touch outside if(getDialog() != null) getDialog().setCanceledOnTouchOutside(true); } @Override public void onDestroyView() { // http://code.google.com/p/android/issues/detail?id=17423 if(getDialog() != null && getRetainInstance()) getDialog().setDismissMessage(null); super.onDestroyView(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder .setTitle("title") .setIcon(R.mipmap.ic_launcher) .setMessage(mExample) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onSimpleDialogPositiveClick(SimpleDialogFragment.this); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onSimpleDialogNegativeClick(SimpleDialogFragment.this); } }); return builder.create(); } private void handleArguments(Bundle arguments) { if(arguments.containsKey(ARGUMENT_EXAMPLE)) { mExample = (String) arguments.get(ARGUMENT_EXAMPLE); } } }