Сохранить несколько значений из DialogPreference - PullRequest
3 голосов
/ 03 ноября 2011

У меня проблемы с сохранением нескольких значений в настройках диалога.У меня есть DialogPreference, который показывает два средства выбора времени, и я хотел бы, чтобы значения времени для каждого средства выбора сохранялись (показано ниже как startTime и endTime).Однако мой код возвращает только значение DefValue из моей DialogPreference, и я не понимаю, почему эти значения не сохраняются .... Спасибо за вашу помощь.Код ниже:

public class TimePickerPreference extends DialogPreference implements
    TimePicker.OnTimeChangedListener {
private String startTime;
private String endTime;


private String defaultValue;
public TimePickerPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize();
}

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

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

@Override
protected View onCreateDialogView() {

    LinearLayout layout = new LinearLayout(getContext());
   layout.setOrientation(LinearLayout.VERTICAL);
    TextView tvStart = new TextView(getContext());
    TimePicker tp = new TimePicker(getContext());
    TextView tvEnd = new TextView(getContext());
    TimePicker tp2 = new TimePicker(getContext());

    tvStart.setText("From:");
    tvEnd.setText("To:");
    tvStart.setTextSize(14);
    tvEnd.setTextSize(14);

    tp.setOnTimeChangedListener(this);

    int h = getHour();
    int m = getMinute();
    if (h >= 0 && m >= 0) {
        tp.setCurrentHour(h);
        tp.setCurrentMinute(m);
    }

    tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {

        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub
            final long starttime = (minute * 60 + hourOfDay * 60 * 60) * 1000;
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            startTime = format.format(starttime);
            persistString(startTime);

        }
    });
    tp2.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {

        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub
            final long endtime = (minute * 60 + hourOfDay * 60 * 60) * 1000;
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            endTime = format.format(endtime);
            persistString(endTime);
        }
    });
    layout.addView(tvStart);
    layout.addView(tp);
    layout.addView(tvEnd);
    layout.addView(tp2);
    return layout;
}

1 Ответ

1 голос
/ 06 сентября 2012

Лучший ответ на ваш вопрос здесь: Краткий способ написания новых классов DialogPreference?

Я думаю, что здесь есть 2 важные ошибки, основанные на этой ссылке: во-первых, setPersistent(boolean) должно быть ложным, а во-вторых, вам нужно использовать getEditor() для хранения нескольких SharedPreferences в DialogPreference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...