1

カスタムDialogPreferenceがあります。ダイアログはPreferenceScreenから呼び出されます。すべて正常に動作し、ダイアログが起動してTimePickerが表示されます。

しかし、どうすれば選択した値を取得できますか?まず、プリファレンスの概要に選択した時間を書いてみました。(したがって、var xxx :)後で、SharedPreferencesに値を保存したいと思います。

これは私が今持っているものです:

public class Calendar extends DialogPreference implements
    TimePicker.OnTimeChangedListener {

TimePicker tp;
int xxx;

public Calendar(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize();
}

public Calendar(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initialize();
}

private void initialize() {
    setPersistent(true);
}

@Override
protected View onCreateDialogView() {
    tp = new TimePicker(getContext());
    tp.setIs24HourView(true);

    return tp;
}

@Override
public void onTimeChanged(TimePicker arg0, int arg1, int arg2) {
}

@Override
public void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if (positiveResult) {
        // getEditor().
        setTitle(getTitle());
        setSummary(Integer.toString(xxx));

    }
}
private TimePicker.OnTimeChangedListener mTimeSetListener =
    new TimePicker.OnTimeChangedListener() {

        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            xxx=hourOfDay;

        }
    };
}

どうもありがとうございました

4

2 に答える 2

1

この質問をしていただきありがとうございます。DialogPreference の作成方法に関する重要な回答が得られました。

また、お答えいただけると幸いです。コードを少し修正し、ダイアログから選択した時間を保存できるようになりました:

@Override
protected View onCreateDialogView() {
    this.tp = new TimePicker(getContext());
    this.tp.setIs24HourView(true);
    final String storedValue = getPersistedString("07:00");
    final String[] split = storedValue.split(":");
    this.tp.setCurrentHour(Integer.parseInt(split[0]));
    this.tp.setCurrentMinute(Integer.parseInt(split[1]));
    return this.tp;
}

@Override
public void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    if (positiveResult) {
        final String result = this.tp.getCurrentHour() + ":" + this.tp.getCurrentMinute();
        persistString(result);
    }
}

ダイアログが表示されたら、保存されている値を取得し、 のフィールドcurrentHourcurrentMinuteフィールドを設定するだけTimePickerです。ダイアログが閉じているときは逆になります。途中と途中で両方のフォーマットを制御するので、不正な値の問題はありません。

これはあなたが探していたものでしたか?

于 2011-03-03T15:04:09.937 に答える