2010-08-01 15 views
1

我有一個小部件,它是一個TimePicker,用於檢索保存在數據庫字段中的時間。如果正在使用鍵盤,TimePicker中的時間更改時如何捕獲?

問題是,當用戶更改小部件中的時間值時,這不會被保存在數據庫中。

所以我碰到了setOnTimeChangedListener方法,它像一個魅力,如果你只使用小工具中的加號和減號。如果您使用關鍵字,它不會捕獲更改。

這裏是我的代碼:

pickedTime.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { 

     public void onTimeChanged(TimePicker arg0, int arg1, int arg2) { 
      System.out.println("What time is it? " 
        + String.valueOf(arg0.getCurrentHour()) + ":" 
        + String.valueOf(arg0.getCurrentMinute())); 
     } 

    }); 

我也嘗試過失敗:

pickedTime.setOnFocusChangeListenerpickedTime.setOnKeyListener方法。

+1

從未想過...我找到了答案...在xml佈局中,我只需將屬性設置爲true **從兒童**添加狀態。感謝您閱讀.. – monn3t 2010-08-01 04:54:13

+0

發佈爲答案,並在2天內接受您的答案 – Pentium10 2010-08-01 08:19:57

回答

1

由於mon3t發現,該選項是設置機器人:在XML文件中AddStatesFromChildren = 「真」,如:

<DatePicker 
    android:id="@+id/datePicker" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:addStatesFromChildren="true" /> 
<TimePicker 
    android:id="@+id/timePicker" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:addStatesFromChildren="true" /> 

或者你可以設置通過代碼:

datePicker.setAddStatesFromChildren(true); 
    timePicker.setAddStatesFromChildren(true); 

我真的不明白默認的方式是什麼。

4

它在處理對話框和使用TimePicker時不適用於我。

我在某處讀到它與焦點有關的地方,所以如果你在關閉對話框之前做了一個清晰的焦點,它就會起作用。

喜歡的東西:

@Override 
protected void onDialogClosed(boolean positiveResult) { 
    super.onDialogClosed(positiveResult); 

    if (positiveResult) { 
     picker.clearFocus(); 
     lastHour=picker.getCurrentHour();    
     lastMinute=picker.getCurrentMinute(); 

     String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute); 

     if (callChangeListener(time)) { 
      persistString(time); 
     } 
    } 
} 
1

西科拉的回答實際上是加入了很多的價值,這個常見的問題。

如果您不管理更改事件,並從其他代碼片段(例如標準按鈕的onClick處理程序)中查找時間選擇器的值,則需要清晰的焦點以獲取實際值的時間選擇器,當用戶用鍵盤手動輸入小時或分鐘時,而不是使用向上或向下箭頭或滾動器,取決於它們是蜂窩還是更高版本。

謝謝Sikora。

相關問題