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。そして、役に立たない 2 つのスイッチがあります。正しいコードは次のようになります。

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と、同じ値に設定すると、コンパイラはエラーを表示します (指定された値に対して複数の ID を指定することはできないためcase)。

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

編集:私は個人的にメソッドから複数の出口点が嫌いなので、これを少し作り直しました-あなたは多くのreturn.

于 2012-08-29T18:57:20.720 に答える