Natknąłem się na blokadę drogi. Mam scenariusz BARDZO podobny do tego opisanego pod adresem: DialogFragment - retaining listener after screen rotationJak zachować słuchacza w niestandardowym oknie dialogowym otwieranym z fragmentu?
Proponowane rozwiązanie działa dobrze dla autora, ponieważ jego dialog jest wywoływany z działania. Moja sprawa jest dokładnie taka sama, ale moje Niestandardowe okno dialogowe jest wywoływane z fragmentu zamiast z działania. (IE Activity-> Fragment-> Dialog)
Zaimplementowałem to samo rozwiązanie (ustawienie detektora w onResume z fragmentu wywołującego), ale nie działa w tym przypadku.
Wygląda na to, że po obróceniu ekranu Android zabija Dialog i Fragment. Następnie odtwarza je W TYM ZAMÓWIENIU. Tak więc, gdy mój onCreateDialog jest wywoływany w moim niestandardowym oknie dialogowym, zawierający go Fragment nie został jeszcze odtworzony, więc ma wartość NULL dla odbiornika, aby ustawić dla pozytywnych i negatywnych przycisków.
Czy ktoś wie, jak to obejść?
Mogę opublikować kod, jeśli ktoś myśli, że będzie to konieczne, ale jest prawie taki sam jak kod w połączonym wątku.
aktualizowana o kodzie:
public class RecipeDetailEditFragment extends SherlockFragment implements DialogInterface.OnClickListener {
private EditStepFragmentDialog stepDialog;
private Recipe newRecipe; //main data object implements parcelable
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
stepDialog = EditStepFragmentDialog.newInstance(newRecipe);
//I've also tried passing 'this' into the newInstance constructor and
//setting the listener there, but that doesn't work either
}
public void onResume() {
stepDialog.setListener(this);
super.onResume();
}
...
}
public class EditStepFragmentDialog extends DialogFragment {
private DialogInterface.OnClickListener ocl;
private static final String ARG_RECIPE = "recipe";
private Recipe recipe;
public EditStepFragmentDialog() {}
public static EditStepFragmentDialog newInstance(Recipe rec) { //(Recipe rec, DialogInterface.OnClickListener oc) as mentioned doesn't work.
EditStepFragmentDialog dia = new EditStepFragmentDialog();
Bundle args = new Bundle();
args.putParcelable(ARG_RECIPE, rec);
//dia.setListener(oc);
return dia;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
if (getArguments().containsKey(ARG_RECIPE)) {
recipe = (Recipe) getArguments().getParcelable(ARG_RECIPE);
}
...
adb.setPositiveButton("Done", ocl);
adb.setNegativeButton("Cancel", ocl);
...
return adb.create();
}
public void setListener(DialogInterface.OnClickListener cl) {
ocl = cl;
}
}
Będziesz musiał opublikować kod – Atomix