package com.example.dialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import com.example.R;
public class MultiChoiceItemsDialogFragment extends DialogFragment
{
private static final String ARGUMENT_CHECKED_ITEMS = "checked_items";
private boolean mCheckedItems[] = null;
private MultiChoiceItemsDialogListener mListener;
public interface MultiChoiceItemsDialogListener
{
void onMultiChoiceItemsDialogPositiveClick(DialogFragment dialog, boolean checkedItems[]);
void onMultiChoiceItemsDialogNegativeClick(DialogFragment dialog);
}
public static MultiChoiceItemsDialogFragment newInstance(boolean checkedItems[])
{
MultiChoiceItemsDialogFragment fragment = new MultiChoiceItemsDialogFragment();
// arguments
Bundle arguments = new Bundle();
arguments.putBooleanArray(ARGUMENT_CHECKED_ITEMS, checkedItems);
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 = (MultiChoiceItemsDialogListener) getTargetFragment();
}
catch(ClassCastException e)
{
throw new ClassCastException(getTargetFragment().toString() + " must implement " + MultiChoiceItemsDialogListener.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)
.setMultiChoiceItems(items, mCheckedItems, new OnMultiChoiceClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked)
{
mCheckedItems[which] = isChecked;
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
mListener.onMultiChoiceItemsDialogPositiveClick(MultiChoiceItemsDialogFragment.this, mCheckedItems);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
mListener.onMultiChoiceItemsDialogNegativeClick(MultiChoiceItemsDialogFragment.this);
}
});
return builder.create();
}
private void handleArguments(Bundle arguments)
{
if(arguments.containsKey(ARGUMENT_CHECKED_ITEMS))
{
mCheckedItems = (boolean[]) arguments.get(ARGUMENT_CHECKED_ITEMS);
}
}
}