Минимальный минимум:
MyCustomDialogPreference(Context context, AttributeSet attrs)
конструктор.
- Не забудьте позвонить
super(context, attrs)
.
- Позвоните
setPersistent(false)
, чтобы указать суперклассу, что вы сохраняете значение предпочтения самостоятельно.
- Если вы хотите надуть макет диалоговой панели из ресурса, то также вызовите
setDialogLayoutResource(int dialogLayoutResId)
.
onBindDialogView(View view)
- обновите представление значениями, которые вы предпочитаете.
- Не забудьте позвонить
super.onBindDialogView(view)
.
onDialogClosed(boolean positiveResult)
- если PositiveResult имеет значение true, сохраните значения из вашего представления в SharedPreferences.
- Не забудьте позвонить
super.onDialogClosed(positiveResult)
.
Это был минимальный минимум, и он предполагает, что:
- Ваш пользовательский DialogPreference управляет одной парой ключ / значение предпочтения.
- Вы несете ответственность за сохранение значения предпочтения.
- Вы надуваете макет диалоговой панели из ресурса.
Теперь о некоторых дополнительных опциях:
(a) Если вы хотите создать макет диалоговой панели программным способом, то также используйте onCreateDialogView()
вместо вызова setDialogLayoutResource()
в конструкторе.
(b) Если ваше предпочтение поддерживает только одну пару ключ / значение, то вы можете использовать вспомогательные методы сохранения persistBoolean(boolean), persistFloat(float), persistInt(int), persistLong(long), persistString(String)
, когда сохраняете измененное значение предпочтения в onDialogClosed (). В противном случае вам нужно использовать метод getEditor()
, например:
private MyCustomView myView;
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
// the view was created by my custom onCreateDialogView()
myView = (MyCustomView)view;
SharedPreferences sharedPreferences = getSharedPreferences();
myView.setValue1(sharedPreferences.getString(myKey1, myDefaultValue1));
myView.setValue2(sharedPreferences.getString(myKey2, myDefaultValue2));
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
Editor editor = getEditor();
editor.putString(myKey1, myView.getValue1());
editor.putString(myKey2, myView.getValue2());
editor.commit();
}
}
(c) Если вы планируете предоставлять значения по умолчанию из раздутого xml, то вам также необходимо реализовать метод onGetDefaultValue(TypedArray a, int index)
.
@ RichardNewton, я знаю, что прошел месяц с тех пор, как вы задали вопрос. Я надеюсь, что вы все еще можете использовать его.