Czy można wyświetlać wiele okien dialogowych jeden nad drugim? Czy jest coś takiego jak Dialog Z-Level? Używam DialogFragment, w którym użytkownik wybiera elementy, gdy potwierdza swój wybór, jest zapisany w bazie danych i wysłany na serwer. jeśli akcja zapisu zakończy się niepowodzeniem, chciałbym poinformować użytkownika o ... innym oknie dialogowym jest to możliwe? I czy nie zniknie z mojego pierwszego okna dialogowego? Z góry dzięki.Android: czy mogę wyświetlać wiele okien dialogowych jeden nad drugim? Czy jest coś takiego jak Dialog Z-Level?
Odpowiedz
Rzeczywiście, możliwe jest wyświetlanie wielu okien dialogowych w jednym fragmencie. Kolejność z-Z zależy od kolejności, w jakiej są tworzone.
W poniższym kodzie znajduje się przykład FragmentActivity z zachowaniem, którego potrzebujesz.
public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
//...
}
public void onSave(View view) {
Intent intent = getIntent();
this.setResult(RESULT_OK, intent);
finish();
}
public void onCancel(View view) {
finish();
}
public void SelectWeekDay(View view) {
DialogFragment selectWeekDayFragment = new SelectWeekDayFragment();
selectWeekDayFragment.show(getSupportFragmentManager(), "WeekDayDialog");
}
public class SelectWeekDayFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.week_day_dialog, container, true);
Button saveButton = (Button) view.findViewById(R.id.button_save);
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkboxMonday = (CheckBox) getDialog().findViewById(R.id.checkBox_monday);
if (!checkboxMonday.isChecked()) {
DialogFragment saveErrorFragment = new SaveErrorFragment();
saveErrorFragment.show(getSupportFragmentManager(), "SaveErrorFragment");
}
else {
SaveToDb(); //Perform actions to store on db or what you wish
dismiss();
}
}
});
Button cancelButton = (Button) view.findViewById(R.id.button_cancel);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return view;
}
}
public class SaveErrorFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setMessage("You must select Monday").setPositiveButton("Ok", null).create();
}
}
}
Moja rada polega na użyciu niestandardowego układu z okienkiem ViewFlipper w oknie dialogowym, dzięki czemu można łatwo przełączać między paskiem postępu lub dowolnymi innymi układami, które mają być wyświetlane. Jeśli chcesz pokazać wiele okien dialogowych, domyślam się, że kolejność z-Z zależy od kolejności, w jakiej zostały utworzone, od ostatniego pokazanego na górze.
Zwykle można jednak zachować ostrożność. Skorzystaj z cyklu życia okna dialogowego na swoją korzyść, aby uniknąć efektów ubocznych. Na przykład: możesz sprawdzić funkcję jak onStop(), aby sprawdzić, czy okno dialogowe podrzędnego jest otwarte, a jeśli tak, zamknij je.
Idealnie, wycinanie od ilości warstw dialogowych masz jest idealna, tak długo, jak to jest zdrowy (na przykład: robi to kończy się setki linii kodu więcej)