OnCancelListener n'est pas appelée dans DialogFragment

J'ai un simple AlertDialog qui affiche une liste de certains éléments et en cliquant sur l'un d'entre eux, l'élément cliqué est passé à l'enfermant Activity. Je tiens également à effectuer certaines gestion par défaut lorsque l'utilisateur annule la boîte de dialogue (à l'aide de la bouton de retour) - plus précisément, je veux passer une chaîne vide à l'activité dans de tels cas.

Cependant, si je mets la boîte de dialogue dans un DialogFragment (à partir de la package de compatibilité), le OnCancelListener n'est pas appelé quand j'ai fermer la boîte de dialogue avec le bouton de retour. Ce que je fais mal?

public class SelectItemDialog extends DialogFragment {
public interface Callback {
void onItemSelected(String string);
}
private static final String ARG_ITEMS = "items";
private Callback callback;
public static SelectItemDialog fromItems(Collection<String> items) {
SelectItemDialog fragment = new SelectItemDialog();
fragment.setArguments(newArguments(items));
return fragment;
}
private static Bundle newArguments(Collection<String> items) {
Bundle arguments = new Bundle();
arguments.putStringArray(ARG_ITEMS, items.toArray(new String[items.size()]));
return arguments;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callback = (Callback) activity;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final String[] items = getArguments().getStringArray(ARG_ITEMS);
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialog_select_email_title)
.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
callback.onItemSelected(items[which]);
}
})
.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//this code is not executed
callback.onItemSelected("");
throw new RuntimeException("dialog cancelled");
}
})
.create();
}
}
InformationsquelleAutor Natix | 2013-02-09