Ric*_*ton 38 java mobile android
我正在通过扩展DialogPreference类在Android中编写一些自定义首选项对话框.但是,我对这需要的锅炉板代码量有点担心,因为似乎有很多行为需要测试.
例如,一些偏好对话框的这个例子是相当典型: http://svn.jimblackler.net/jimblackler/trunk/workspace/NewsWidget/src/net/jimblackler/newswidget/NumberPreference.java
特别是,onSave()/ RestoreInstanceState()methods和"类SavedState"部分是必需的,以便在方向更改时保留对话框的当前更改是非常冗长和复杂的.
有没有人有更简洁的方式编写DialogPreference类的技巧?
Roy*_*ron 138
MyCustomDialogPreference(Context context, AttributeSet attrs) 构造函数.
super(context, attrs).setPersistent(false)以向超级Preference类指示您自己保留首选项值.setDialogLayoutResource(int dialogLayoutResId).onBindDialogView(View view) - 使用您的偏好值更新视图.
super.onBindDialogView(view).onDialogClosed(boolean positiveResult) - 如果positiveResult为true,则将视图中的值保存到SharedPreferences.
super.onDialogClosed(positiveResult).这是最低限度,它假定:
(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();
}
}
Run Code Online (Sandbox Code Playgroud)
(c)如果您计划从膨胀的xml提供默认值,那么您还需要实现该onGetDefaultValue(TypedArray a, int index)方法.
@RichardNewton,我知道你问这个问题已经过去了一个月.我希望你仍然可以使用它.