0

我设置了一个 onCreateDialog,我需要放置 2 个对话框(Datepicker 和 Timepicker),但是当我将它们都放在 onCreateDialog 中时,它只会打开第一个是 Datepicker。

代码:

    @Override
protected Dialog onCreateDialog(int id) {
    //date picker
            switch (id) {
                case DATE_DIALOG_ID:
               // set date picker as current date
                    return new DatePickerDialog(this, datePickerListener, year, month,day);
                }
            //time picker
            switch (id) {
                case TIME_DIALOG_ID:
                    //set time picker as current time
                    return new TimePickerDialog(this, timePickerListener, hour, minute,false);
                    }
            return null;
}
4

1 回答 1

5

是的,你可以,但你switch的无效。的正确语法switch是:

switch( variable ) {
  case value1:
      ...
      break;
  case value X:
      ...
      break;
}

并且可以选择default捕获您没有明确case的所有其他值。你有两个没用的开关。你正确的代码是:

AlertDialog myDialog = null;

switch (id) {
  case DATE_DIALOG_ID:
    // set date picker as current date
    myDialog = new DatePickerDialog(this, datePickerListener, year, month,day);
    break;

  case TIME_DIALOG_ID:
    //set time picker as current time
    myDialog = new TimePickerDialog(this, timePickerListener, hour, minute,false);
    break;

}

return myDialog;

您的 ID 也必须是唯一的,但是一旦您修复了switch,如果您将其设置为相同的值,编译器将显示错误(因为给定的值不能超过一个case)。

public static final int TIME_DIALOG_ID = 1;
public static final int DATE_DIALOG_ID = 2;

编辑:我再次修改了这个,因为我个人不喜欢该方法的多个退出点 - 你有很多return.

于 2012-08-29T18:57:20.720 回答