質問

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top