TimePickerDialog取消按钮不丢弃数据

时间:2012-08-22 22:53:41

标签: android timepicker

我知道这已被问过很多次,但我找不到适合我的问题的答案。

所以我有一个活动,它有一个按钮,其中'文本是当前时间(访问活动的时间)。我可以单击按钮显示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();
            }
        };

2 个答案:

答案 0 :(得分: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()Set或使用后退按钮,您应该知道Cancel已被调用。如果用户点击Set您不希望调用onCancel()方法onDismiss()。不要将onCancel()onDismiss()视为相同的方法。

答案 1 :(得分:0)

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