2012-04-23 6 views
5

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

4

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(); 
     } 
    } 
} 
1

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.

0

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)