2011-11-22 73 views
4

我在我的應用程序中有一個datePicker對話框。當我選擇日期時它工作正常。但是,如果在對話框中我更改日期,然後按取消,原始編輯文本保持不變,但日期選擇器仍然具有取消前的日期。我想確保每次進入Date Picker時,它都會從EditText設置日期。我的代碼如下。如何在選擇取消按鈕時重置DatePicker

onCreate()方法

// Date Listener 
    fdEtDate.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      showDialog(DATE_DIALOG_ID); 
      return false; 
     } 
    }); 

再往下活動

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, 
        dateSetListener, 
        cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE)); 
    case STD_DIALOG_ID: 
     return new TimePickerDialog(this, 
        stdSetListener, 
        stdHH, stdMM, 
        true); 
    case STA_DIALOG_ID: 
     return new TimePickerDialog(this, 
        staSetListener, 
        staHH, staMM, 
        true); 
    } 
    return null; 
} 

// the callback received when the user "sets" the date in the dialog 
private DatePickerDialog.OnDateSetListener dateSetListener = 
    new DatePickerDialog.OnDateSetListener() { 

     public void onDateSet(DatePicker view, int year, 
           int monthOfYear, int dayOfMonth) { 
      cal.set(Calendar.YEAR, year); 
      cal.set(Calendar.MONTH, monthOfYear); 
      cal.set(Calendar.DATE, dayOfMonth); 
      updateDisplay(); 
     } 
}; 
// updates the date in the TextView 
private void updateDisplay() { 
    fdEtDate.setText(
     new StringBuilder() 
       .append(Utils.pad(cal.get(Calendar.DATE))).append(Const.SQL_DATE_SEP) 
       .append(Utils.pad(cal.get(Calendar.MONTH)+1)).append(Const.SQL_DATE_SEP) 
       .append(cal.get(Calendar.YEAR))); 

    fdEtStd.setText(
     new StringBuilder() 
       .append(Utils.pad(stdHH)).append(Const.SQL_TIME_SEP) 
       .append(Utils.pad(stdMM))); 

    fdEtSta.setText(
     new StringBuilder() 
       .append(Utils.pad(staHH)).append(Const.SQL_TIME_SEP) 
       .append(Utils.pad(staMM))); 
} 

似乎是創建一個新的對話框每一次,爲什麼是不是每次初始化與fdEtDate日期(EditText上)

在此先感謝

回答

8

你應該使用onPrepareDialog設置每次顯示對話框時的初始日期。

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    switch (id) { 
    case START_DATE_DIALOG_ID: 
     ((DatePickerDialog) dialog).updateDate(
      mCalendar.get(Calendar.YEAR), 
      mCalendar.get(Calendar.MONTH), 
      mCalendar.get(Calendar.DAY_OF_MONTH)) 
    } 
} 

對話框創建僅在第一次被顯示,並從該點,除非你有removeDialog明確地摧毀它重新使用它()。

如果您正在使用onCreateDialog(INT)來管理對話框的狀態(如在上一節中討論),然後每次你的對話框關閉時,對話框對象的狀態是由活動保留。如果你決定不再需要這個對象或重要的是狀態被清除,那麼你應該調用removeDialog(int)。這將消除任何內部引用的對象,如果對話框顯示,它會關閉它

http://developer.android.com/guide/topics/ui/dialogs.html

+1

輝煌,這正是我想要的,你是明星。第一次工作。非常感謝非常及時的答覆。 – PeterB

+0

歡迎:) – Chiara

+0

是的,謝謝這工作正常,但是當我編輯我的數據在那個時候datepicker打開當前日期insted從我保存的數據。所以在編輯時我怎樣才能得到datepicker對話框中最後添加的日期? – 2012-09-10 06:45:41

0

,因爲你改變你的onDateSet對象Calendar的值,它可能。嘗試通過向LogCat添加一些輸出來驗證何時調用方法,例如Log.e("MyTag", "onDateSet was called!");。然後嘗試一下,看看它何時被調用。

如果是這種情況,並且onDateSet在您沒有料到的時候被調用,您應該更改設置日曆的時間。

+0

不是我真正在做的。不管怎麼說,還是要謝謝你 – PeterB

相關問題