Android:タイムパイカーが入力されたときに時間を取得する方法
-
10-10-2019 - |
質問
Simple TimePicker.OntimeChedListenerを実装する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()でfinish()を呼び出します。
// 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();
この後、私は私のテーブルの適切な列にtimillis.tomillis(false)値を保存します。
時造影剤があなたのondialogclosedでまだアクセスできるかどうかはわかりません(boolean positiveresult)。そうでない場合は、まだ使用する別のコールバックを見つけてください。
お役に立てれば。
他のヒント
これまでのところ非常に悪い回避策だけです...
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;
所属していません StackOverflow