web-dev-qa-db-ja.com

Android:入力時にTimePickerから時間を取得する方法

単純な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);
        }
    }
}
// ...
}
11
cody

この質問に出くわすまで、私はこの問題に気づいていませんでした。簡単な解決策があります。ユーザーがアプリで日付と時刻の変更を完了したら、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)でタイムピッカーにまだアクセスできるかどうかはわかりません。そうでない場合は、まだあるときに使用する別のコールバックを見つけます。

お役に立てれば。

48
Larphoid

これまでのところ、非常に悪い回避策のみです...

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;
1
cody