7

我正在使用以下代码来显示TimePickerDialog

TimePickerDialog dialog = new TimePickerDialog(this, new OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            System.out.println("onTimeSet");
        }
    }, 20, 15, true);
    dialog.setTitle("Test");
    dialog.setButton(TimePickerDialog.BUTTON_POSITIVE, "Done", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            System.out.println("Done");
        }
    });
    dialog.setButton(TimePickerDialog.BUTTON_NEGATIVE, "Cancel", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            System.out.println("Cancel");
        }
    });
    dialog.show();

在运行 Android 2.3.7 的设备上,onTimeSet不会调用该方法(该onClick方法会调用)。在运行 4.2.2 的设备上,onTimeSet它确实会被调用。

这里发生了什么?

4

1 回答 1

16

TimePickerDialog 在 Android 4.1.1 之后发生了变化,并且存在关于取消 TimePickerDialog 和 DatePickerDialog 的错误。请先在这里阅读。默认情况下不需要设置正负按钮。TimePickerDialog 和 DatePickerDialog 为您处理这些。因此,如果此取消问题对您不重要,请删除正负按钮的设置。如果您在用户单击“确定”按钮的情况下删除这两个版本中的那些,您的 onTimeSet 方法将被调用。

但我建议在修复该错误之前,使用带有 TimePicker 小部件的定制 AlertDialog;

    final TimePicker timePicker = new TimePicker(this);
    timePicker.setIs24HourView(true);
    timePicker.setCurrentHour(20);
    timePicker.setCurrentMinute(15);

    new AlertDialog.Builder(this)
            .setTitle("Test")
            .setPositiveButton(android.R.string.ok, new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.d("Picker", timePicker.getCurrentHour() + ":"
                            + timePicker.getCurrentMinute());
                }
            })
            .setNegativeButton(android.R.string.cancel,
                    new OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            Log.d("Picker", "Cancelled!");
                        }
                    }).setView(timePicker).show();
于 2013-03-03T17:05:54.033 回答