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 がこれらを処理します。したがって、このキャンセルの問題が重要でない場合は、肯定ボタンと否定ボタンの設定を削除してください。ユーザーが [OK] ボタンをクリックして両方のバージョンでそれらを削除すると、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 に答える