3

我有一个PrefrenceActivity包含DialogPreference我的自定义布局(编辑文本和复选框)。

当我的 DialogPrefernce 第一次被调用时,它onSetInitValue被调用,我从 SharedPreferences 获取值,然后在onBindDialogView我更新我的编辑文本和复选框。

然后我更改 edittext 值,(肯定)关闭对话框并将值保存到 SharedPreferences in onDialogClosed

迄今为止的出色工作。

不幸的是,当我再次打开对话框时,onSetInitValue不会调用 并且值保持不变。我发现只有在关闭 PrefrenceActivity 并重新打开它之后才会调用 onSetInitValues 。

我使用一个标志来破解它(如果调用 onSetInitValues 我设置我检查 onBindDialogView 的标志 - 如果它没有设置我从 SharedPreferences 获取值)。

这是一个丑陋的解决方案。onSetInitValues当首选项没有关闭时,有没有办法“重新呈现”对话框或调用?

4

1 回答 1

0

有完全相同的问题,不幸的是只找到了一个或多或少干净的解决方法:

initialValue = getPreferenceManager().getSharedPreferences().getInt(getKey(), DEFAULT_VALUE);

在您的 onCreateDialogView 方法中调用上述内容,并将 getInt 和 DEFAULT_VALUE 分别替换为您想要的类型和默认常量。

每次打开对话框时,这应该会获得最新的首选项值,但上帝可能是我的见证,Android 并没有停止让我震惊,因为它的扭曲和不必要的复杂 API。文档对这一个以及 AFAICT 保持沉默。

于 2018-09-17T22:40:52.610 回答