2014-10-27 72 views
0

我正在體驗我認爲是DatePicker錯誤。Android DatePicker年不更新

我有一個日期選擇器對話框:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"  
    android:gravity="center_horizontal" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    > 
    <DatePicker 
     android:id="@+id/datePicker" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:calendarViewShown="false" 
     android:layout_gravity="center_horizontal" 
     android:paddingBottom="20dp" 
     android:paddingTop="10dp" 
     >  
    </DatePicker> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"  
     android:orientation="horizontal" 
     android:weightSum="1" 
     android:gravity="center_horizontal" 
     > 

     <Button 
      android:id="@+id/cmdCancel" 
      android:text="@android:string/cancel" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight=".5"   
      > 
     </Button> 

     <Button 
      android:id="@+id/cmdOK" 
      android:text="@android:string/ok" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight=".5"   
      > 
     </Button> 

     </LinearLayout> 
</LinearLayout> 

我得到它的句柄和需要的日期條目時顯示的對話框。該Ok按鈕的代碼是這樣的:

Button cmdOK = (Button)dialogDate.findViewById(R.id.cmdOK); 
cmdOK.setOnClickListener(new View.OnClickListener() {      
    @Override 
    public void onClick(View v) {     
     try { 

      int day = datePicker.getDayOfMonth(); 
      int month = datePicker.getMonth()+1; // offset index 
      int year = datePicker.getYear(); 
      String dob = month+"/"+day+"/"+year; 
      txtDOB.setText(dob); 

      closeDialogDate(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }         
}); 

一切正常SANS一個場景,我可以重複的行爲。

問題:

如果我選擇在今年通過點擊的價值,並得到一個數字鍵盤,輸入日期和它的最後一件事,進入正題,我是否打done鍵盤上或剛打Ok按鈕,執行處理,年份不會正確更新。如果我選擇日期或月份值,然後點擊Ok年份正確更新。如果我使用紡紗機,年份會正確更新。錯誤出現的唯一時間是最後一次和直接輸入的值。

我沒有正確地做什麼?

這不是-1900問題。使用提供的屏幕快照,該值將更改爲1990年,而1984年將返回 - 默認值。

enter image description here

其他參考資料:

  • OS V4.0.4(冰淇淋三明治)
  • 目標API 4.0

回答

4

這聽起來像按鈕點擊回調在手動輸入的年份有機會保存到DatePicker之前觸發。

我相信月份和日期字段「工作」,因爲當您填寫值時,他們會自動重新調整到下一個字段(將值保存到DatePicker中)。但是,我可以通過輸入一位數字來關閉鍵盤,然後按下「確定」,強制Day字段按照您描述的方式運行 - 日期值未保存。

讓我們來看看DatePickerDialog的「OK」法源:

public void onClick(DialogInterface dialog, int which) { 
    if (mCallBack != null) { 
     mDatePicker.clearFocus(); 
     mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), 
     mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); 
    } 
} 

由於您的按鈕顯示爲自定義佈局項目(即您使用的不是實際DatePickerDialog),你應該叫獲取日期之前,在DatePicker上使用clearFocus()。或者,使用DatePickerDialog。

+0

只有年份的價值表現如此。月份和日期以任意順序正常工作。非常好奇。 – 2014-10-27 21:42:06

+1

我能夠重現與日還,看到我更新的答案。 – 2014-10-27 21:49:31

+0

也許這個問題應該是'如何強制DatePicker上的字段更新'? – 2014-10-27 22:04:33