2012-08-22 46 views
0

我知道這已被問了很多次,但我找不到適合我的問題的答案。TimePickerDialog取消按鈕不丟失數據

所以我有一個活動,其中的文本是當前時間(活動被訪問的時間)。我可以點擊按鈕來顯示一個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(); 
      } 
     }; 

回答

1

如果我取消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聽衆似乎多餘。你想和他們做什麼?

如果用戶單擊Set,Cancel或使用後退按鈕,則應該知道onDismiss()。如果用戶點擊Set,則不想調用onCancel()方法的方法是onDismiss()。不要將onCancel()onDismiss()視爲相同的方法。

+0

謝謝。我發現只使用onPrepareDialog就有竅門。自己使用.setOnCancelListener,不會恢復原始時間。 – DaveSav

+0

可以在這裏查看運行代碼https://stackoverflow.com/questions/4724781/timepickerdialog-cancel-button/47043247#47043247 – Deepti

0

你永遠正在重置您的日期。如果您在onCancel方法中重置日期/時間,則一切都應正常工作。

+0

我該怎麼做?作爲一個快速測試,我放在最後的日曆c = Calendar.getInstance(); \t \t \t mHour = c.get(Calendar.HOUR_OF_DAY); \t \t \t mMinute = c.get(Calendar.MINUTE);但這並沒有幫助。 – DaveSav

+0

這幾乎是如何:-) – AedonEtLIRA

+0

我已經改變了我的代碼示例以合併您的建議;但它仍然不起作用 – DaveSav