Как вы выбираете время начала и окончания времени из настроек? - PullRequest
2 голосов
/ 20 сентября 2011

Я хотел бы настроить средство выбора времени на экране предпочтений и позволить пользователю выбрать время начала, а также время окончания и сохранить его как постоянное значение, как и другие параметры.

Не могли бы вы показать весь код, необходимый для настройки этого, потому что я не мог найти ничего подобного путем поиска.

Я думаю, что, возможно, средство выбора времени должно быть в диалоге, но я пока не знаю, как его настроить. Если вы можете отобразить кодировку, которая вызывает диалог со средством выбора времени начала и конца, и как сохранить эту информацию для последующего извлечения из экрана настроек, это было бы здорово.

Любая помощь будет принята с благодарностью.

Действительно, Имад

1 Ответ

5 голосов
/ 20 сентября 2011

У меня есть простая TimePreference, которую я использую в одной из моих книг:

import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TimePicker;

public class TimePreference extends DialogPreference {
  private int lastHour=0;
  private int lastMinute=0;
  private TimePicker picker=null;

  public static int getHour(String time) {
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[0]));
  }

  public static int getMinute(String time) {
    String[] pieces=time.split(":");

    return(Integer.parseInt(pieces[1]));
  }

  public TimePreference(Context ctxt, AttributeSet attrs) {
    super(ctxt, attrs);

    setPositiveButtonText("Set");
    setNegativeButtonText("Cancel");
  }

  @Override
  protected View onCreateDialogView() {
    picker=new TimePicker(getContext());

    return(picker);
  }

  @Override
  protected void onBindDialogView(View v) {
    super.onBindDialogView(v);

    picker.setCurrentHour(lastHour);
    picker.setCurrentMinute(lastMinute);
  }

  @Override
  protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult) {
      lastHour=picker.getCurrentHour();
      lastMinute=picker.getCurrentMinute();

      String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);

      if (callChangeListener(time)) {
        persistString(time);
      }
    }
  }

  @Override
  protected Object onGetDefaultValue(TypedArray a, int index) {
    return(a.getString(index));
  }

  @Override
  protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
    String time=null;

    if (restoreValue) {
      if (defaultValue==null) {
        time=getPersistedString("00:00");
      }
      else {
        time=getPersistedString(defaultValue.toString());
      }
    }
    else {
      time=defaultValue.toString();
    }

    lastHour=getHour(time);
    lastMinute=getMinute(time);
  }
}

В реализации этого уровня для производства использовались бы строковые ресурсы для заголовков двух кнопок,Также может быть немного больше ошибок при проверке значения, если какой-то код обновляет его с помощью SharedPreferences.Editor и не форматирует его должным образом.

...