11

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

2 に答える 2

48

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

お役に立てれば。

于 2010-11-09T13:53:35.903 に答える
1

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

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;
于 2010-10-26T17:30:47.897 に答える