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,我希望它忘记任何以前的数据。

每次打开 Dialog 时showDialog()onPrepareDialog()只需在此处重置时间。如果用户单击Set新时间保存在mHour和中mMinute,如果对话框因任何原因被取消,这将恢复原始数据:

@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()如果用户单击 、 或使用后退按钮,则会调用SetCancel。如果用户单击Set您不想调用的onCancel()方法是onDismiss(). 不要把onCancel()onDismiss()当作同一种方法。

于 2012-08-22T23:11:00.397 回答
0

你永远不会重置你的日期。如果您在onCancel方法中重置日期/时间,一切都应该正常。

于 2012-08-22T22:56:49.667 回答