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 SingleChoiceItemsDialogFragment extends DialogFragment { private static final String ARGUMENT_CHECKED_ITEM = "checked_item"; private int mCheckedItem = -1; private SingleChoiceItemsDialogListener mListener; public interface SingleChoiceItemsDialogListener { void onSingleChoiceItemsDialogPositiveClick(DialogFragment dialog, int checkedItem); void onSingleChoiceItemsDialogNegativeClick(DialogFragment dialog); } public static SingleChoiceItemsDialogFragment newInstance(int checkedItem) { SingleChoiceItemsDialogFragment fragment = new SingleChoiceItemsDialogFragment(); // arguments Bundle arguments = new Bundle(); arguments.putInt(ARGUMENT_CHECKED_ITEM, checkedItem); 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 = (SingleChoiceItemsDialogListener) getTargetFragment(); } catch(ClassCastException e) { throw new ClassCastException(getTargetFragment().toString() + " must implement " + SingleChoiceItemsDialogListener.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) { final CharSequence items[] = { "item1", "item2", "item3", "item4"}; AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder .setTitle("title") .setIcon(R.mipmap.ic_launcher) .setSingleChoiceItems(items, mCheckedItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mCheckedItem = which; } }) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onSingleChoiceItemsDialogPositiveClick(SingleChoiceItemsDialogFragment.this, mCheckedItem); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mListener.onSingleChoiceItemsDialogNegativeClick(SingleChoiceItemsDialogFragment.this); } }); return builder.create(); } private void handleArguments(Bundle arguments) { if(arguments.containsKey(ARGUMENT_CHECKED_ITEM)) { mCheckedItem = (Integer) arguments.get(ARGUMENT_CHECKED_ITEM); } } }