最低限度是:
-
MyCustomDialogPreference(Context context, AttributeSet attrs)
constructor.
- 别忘了打电话给.
super(context, attrs)
- 调用以指示超级首选项类自行保留首选项值。
setPersistent(false)
- 如果要从资源中扩充对话框面板布局,则还要调用 。
setDialogLayoutResource(int dialogLayoutResId)
-
onBindDialogView(View view)
- 使用您喜欢的值更新视图。
- 别忘了打电话给.
super.onBindDialogView(view)
-
onDialogClosed(布尔正值结果)
- 如果正结果为真,则将值从您的视图保存到共享首选项。
- 别忘了打电话给.
super.onDialogClosed(positiveResult)
这是最低限度,它假设:
- 您的自定义 DialogPreference 管理单个首选项键/值对。
- 您负责保留首选项值。
- 您正在从资源膨胀对话框面板布局。
现在了解一些其他选项:
(a) 如果要以编程方式创建对话框面板布局,则还要实现 onCreateDialogView()
而不是调用构造函数。setDialogLayoutResource()
(b) 如果您的首选项仅支持单个键/值对,那么当您在 onDialogClosed() 中保留更改的首选项值时,可以使用帮助程序 save 方法。否则,您需要使用该方法,如下所示:persistBoolean(boolean), persistFloat(float), persistInt(int), persistLong(long), persistString(String)
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,我知道自从你问这个问题以来已经过去了一个月。我希望你仍然可以使用它。