0

これが何度も尋ねられていることは知っていますが、私の問題に合った答えが見つかりません。

だから私は、そのテキストが現在の時間(アクティビティがアクセスされた時間)であるボタンを持つアクティビティを持っています。ボタンをクリックして時間を変更できる TimePickerDialog を表示し、[設定] ボタンをクリックすると、ボタンが新しい時間で更新されます。これまでのところ、とても良い、とても基本的です。

私の問題は、TimePicker を起動し、時刻を変更し、[キャンセル] ボタンをクリックしてから TimePicker を再度起動すると、表示された時刻が、起動したボタンからの元の時刻ではなく、キャンセルした時刻になることです。TimePicker をキャンセルする場合は、以前のデータをすべて忘れてもらいたいです。

これが私のコードです:

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        recordTime = new TimePickerDialog(this,mTimeSetListener, mHour, mMinute, true);
        recordTime.setOnCancelListener(new OnCancelListener(){

            @Override
            public void onCancel(DialogInterface arg0) {

final Calendar c = Calendar.getInstance();
                mHour = c.get(Calendar.HOUR_OF_DAY);
                mMinute = c.get(Calendar.MINUTE);
                recordTime.dismiss();
            }
        });

        recordTime.setOnDismissListener(new OnDismissListener(){
            @Override
            public void onDismiss(DialogInterface arg0) {
                recordTime.cancel();
                recordTime.dismiss();
            }

        });
        return recordTime;

    }
    return null;
}


// the callback received when the user sets the time in the dialog
    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour = hourOfDay;
                mMinute = minute;
                updateTimeDisplay();
            }
        };
4

2 に答える 2

2

TimePicker をキャンセルする場合は、以前のデータをすべて忘れてもらいたいです。

showDialog()通過するダイアログが開かれるonPrepareDialog()たびに、ここで時間をリセットするだけです。ユーザーがクリックSetすると、新しい時刻が と に保存mHourmMinuteれます。何らかの理由でダイアログがキャンセルされると、元のデータが復元されます。

@Override
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
    switch (id) {
    case TIME_DIALOG_ID:
        recordTime.updateTime(mHour, mMinute);
    }
}

OnCancelListener でも簡単に呼び出すことができます。

recordTime.setOnCancelListener(new OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        recordTime.updateTime(mHour, mMinute);
    }
});

また、元の OnCancel および OnDismiss リスナーは冗長に見えます。彼らに何をしようとしているのですか?

ユーザーが、、または戻るボタンをonDismiss()クリックすると、 が呼び出されることを知っておく必要があります。ユーザーがクリックした場合、メソッドは. とを同じメソッドとして扱わないでください。SetCancelSetonCancel()onDismiss()onCancel()onDismiss()

于 2012-08-22T23:11:00.397 に答える
0

日付をリセットすることはありません。メソッドで日付/時刻をリセットするとonCancel、すべて正常に動作するはずです。

于 2012-08-22T22:56:49.667 に答える