Получить значение из Custom DialogPreference и сохранить значение

Попытка написать пользовательские настройки диалога (NumberPickerDialog). Несмотря на то, что в документации по Android есть подробности по этой теме, мне кажется, что я пропускаю некоторые важные строительные блоки в их документации.

До сих пор у меня есть диалоговое окно пользовательских настроек, которое отображается в действии настроек. Я могу нажать на предпочтение и ввести значение и нажать OK/ Отмена.

Пользовательский макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editTextNumberPickerValue"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

NumberPickerDialog (работа в процессе...):

public class NumberPickerPreference extends DialogPreference {

    public NumberPickerPreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        setDialogLayoutResource(R.layout.numberpicker_dialog);  
        setPositiveButtonText(android.R.string.ok);
        setNegativeButtonText(android.R.string.cancel);
        setDialogIcon(null);
        setPersistent(false);
    }

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

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (positiveResult) {
            Editor editor = getEditor();
            persistInt( value??? );
        }
    }
}

Preference.xml расширен с:

<com.cleancode.utils.numberpickerpreference.NumberPickerPreference
    android:defaultValue="550"
    android:key="prefLongFlashDuration"
    android:summary="@string/long_flash_duration_summary"
    android:title="@string/long_flash_duration" />

Как я могу:

  • на самом деле показать значение по умолчанию 550?
  • получить значение из диалогового окна?
  • обеспечить, чтобы вводились только целочисленные значения?

Я надеюсь, что кто-то может пролить свет на это, жалкая документация по Android не новичок в этой теме.

Большое спасибо.

1 ответ

В документе Google они говорят это о переменной, которая содержит новое значение

В этом примере mNewValue является членом класса, который содержит текущее значение параметра

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

private EditText newPasswordField;

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

    newPasswordField = view.findViewById(R.id.new_password_field);
}

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

И тогда вы делаете то, что у вас уже было: извлечь новое значение

@Override
protected void onDialogClosed(boolean positiveResult) {
    Log.i(TAG, "Password dialog closed. Result = " + positiveResult);

    if (positiveResult) {
        persistString(newPasswordField.getText().toString());
    }
}
Другие вопросы по тегам