2012-04-23 54 views
5

是否可以顯示多個對話框?有沒有像對話Z級? 我正在使用DialogFragment用戶選擇元素,當他確認他的選擇時,它被保存到數據庫並在服務器上發送。如果保存操作失敗,我想通知用戶...另一個對話框有可能嗎?並且它會不會清除我的第一個對話框? 在此先感謝。Android:我可以顯示多個對話框嗎?有沒有像對話Z級?

回答

4

實際上,可以在另一個內部顯示多個對話片段。 z順序取決於它們的創建順序。

在下面的代碼中有一個FragmentActivity的例子,其中包含您需要的行爲。

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

我的建議是在對話框中使用帶有ViewFlipper的自定義佈局,以便您可以在進度條或任何不同的佈局之間輕鬆切換。如果你想顯示多個對話框,我的猜測是,Z順序取決於它們創建的順序,最上面顯示的是最新的Beeing。

0

但是,您通常可以稍微小心。使用對話框的生命週期來避免副作用。例如:您可以對像onStop()這樣的函數進行檢查,以查看子對話框是否已打開,如果是,則關閉它。

理想情況下,減少對話層的數量是理想的,只要它是理智的(例如:最終完成數百行代碼)