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