単純なTimePicker.OnTimeChangedListenerを実装するDialogPreferenceがあります(以下を参照)。 +/-ボタンをクリックして時間を設定するとうまくいきます。しかし、ユーザーがテキストフィールドに直接時間を入力したときのタイムピッカーの状態を保存する方法がわかりません。現在のテキストフィールド値にアクセスするだけで十分である可能性があるため、onDialogClosedで永続化できます。しかし、timePicker.getCurrentHour()はそれを行いません。助けてください...
public class TimePreference extends DialogPreference implements
TimePicker.OnTimeChangedListener {
// ...
@Override
public void onTimeChanged(TimePicker view, int hours, int minutes) {
selectedHours = hours;
selectedMinutes = minutes;
}
@Override
public void onDialogClosed(boolean positiveResult) {
if(positiveResult) {
String timeString = selectedHours + ":" + selectedMinutes;
if(isPersistent()) {
persistString(timeString);
}
}
}
// ...
}
この質問に出くわすまで、私はこの問題に気づいていませんでした。簡単な解決策があります。ユーザーがアプリで日付と時刻の変更を完了したら、finish()を呼び出し、onPause()、onStop()、またはonDestroy()で次のようにします。
// force the timepicker to loose focus and the typed value is available !
timePicker.clearFocus();
// re-read the values, in my case i put them in a Time object.
time.hour = timePicker.getCurrentHour();
time.minute = timePicker.getCurrentMinute();
この後、time.toMillis(false)値をテーブルの適切な列に格納します。
OnDialogClosed(booleanpositiveResult)でタイムピッカーにまだアクセスできるかどうかはわかりません。そうでない場合は、まだあるときに使用する別のコールバックを見つけます。
お役に立てれば。
これまでのところ、非常に悪い回避策のみです...
ViewGroup v = (ViewGroup) timePicker.getChildAt(0);
ViewGroup numberPicker1 = (ViewGroup) v.getChildAt(0);
ViewGroup numberPicker2 = (ViewGroup) v.getChildAt(1);
String hours = ((EditText) numberPicker1.getChildAt(1)).getText().toString();
String mins = ((EditText) numberPicker2.getChildAt(1)).getText().toString();
selectedTime = hours+":"+mins;