未调用TimePickerDialog.onTimeSetListener

时间:2013-03-01 19:26:28

标签: android

我正在使用以下代码显示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确实会被调用。

这里发生了什么?

1 个答案:

答案 0 :(得分:16)

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

但我建议使用定制的AlertDialog和TimePicker小部件修复错误;

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