我有一个PrefrenceActivity
,其中包括DialogPreference
和我的自定义布局(edittext和复选框)。
当第一次调用我的DialogPreference时,调用它的onSetInitValue
,我从SharedPreferences获取值,然后在onBindDialogView
中我更新了我的edittext和复选框。
然后我更改edittext值,(正)关闭对话框并将值保存到onDialogClosed
中的SharedPreferences。
到目前为止工作很棒。
不幸的是,当我再次打开对话框时,没有调用onSetInitValue
并且值保持不变。我发现仅在关闭PrefrenceActivity并再次重新打开之后才会调用onSetInitValues。
我使用一个标志来攻击它(如果onSetInitValues被调用我设置了标志,我在onBindDialogView中检查 - 如果没有设置我从SharedPreferences获取值)。
这是丑陋的解决方案。有没有办法“重新渲染”对话框或在首选项未关闭时调用onSetInitValues
?
有完全相同的问题,不幸的是只发现了一个或多或少干净的解决方法:
initialValue = getPreferenceManager().getSharedPreferences().getInt(getKey(), DEFAULT_VALUE);
在onCreateDialogView方法中调用上面的内容,并分别用所需的类型和默认常量替换getInt和DEFAULT_VALUE。
这应该在每次打开对话框时获得最新的偏好值,但可能上帝是我的见证Android并不会因为它的扭曲和不必要的复杂API而让我感到震惊。文献对此以及AFAICT保持沉默。