android - 未调用 TimePickerDialog.onTimeSetListener

标签 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 会像它应该的那样被调用。

这里发生了什么?

最佳答案

TimePickerDialog 在Android 4.1.1 之后发生了变化,存在取消TimePickerDialog 和DatePickerDialog 的错误。请先阅读here .默认情况下,您不需要设置正负按钮。 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();

关于android - 未调用 TimePickerDialog.onTimeSetListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165328/

相关文章:

基于 Android 卡片的游戏,需要帮助才能开始

android - 关于逐帧动画的问题特定的android问题

android - 在不使用不必要的 Activity 的情况下构建 Android 测验

android - 将 Eclipse Android 项目更新到下一个版本

android - 如何在 Room Android 的外键中使用 set_default

android - 如何将 Android PropertyValuesHolder 与混淆器一起使用

java - 从谷歌照片中选择照片会破坏我的应用程序

java - 如何在android中获取纬度和经度?

android - 在 Android 中存储用户数据的最佳方式是什么

java - Android 外设 BluetoothGattServerCallback onServiceAdded() 没有被调用