在我的应用程序中,我有偏好:“pref1”,可能的值为 0、1、2。我在 SharedPreferences
类的帮助下保存它们。
我想提供一个用户界面来改变它。我创建类
SettingFragment extends PreferenceFragment
和带有PreferenceScreen
根的 xml 文件。在 xml 文件中,我必须设置android:key
字段以绑定(bind) UI 和SharedPreferences
。要在用户更改“pref1”后更改我的应用程序行为,我必须实现
OnSharedPreferenceChangeListener
。同样在程序开始时我需要获取“pref1”的值, 根据保存的偏好同步程序状态。
所以当我想要添加/删除/修改我的应用程序设置单元时,我应该更改 3 个地方。看起来很糟糕。另一种选择是编写一个 class
,它有一个 SharedPreferences
类型的成员变量,并隐藏所有 SharedPreferences
键,并提供简单的 set/get 方法来获取偏好。但在这种情况下,我必须使用适用于 Android UI 的常规工具:布局。
任何使用 PreferenceFragment
的方法都是如此,而无需将有关偏好存储的内部结构(键的名称、默认值、它们的类型)的知识传播到几个地方,
或者更好地使用普通布局?
最佳答案
正如您已经在问题中强调的那样,基于 SharedPreference
的设置的 3 个部分正在定义 -
1. 供用户查看和更改设置的 UI 布局。
2. 监听设置变化。
3.初始化UI时读取设置。
您实际上不能在不影响您的功能的情况下取消任何部分。但是您可以以某种方式安排您的代码,以便在您想要添加新设置时将必须修改的文件(或代码中的位置)数量降至最低。您无法删除 UI building
部分。但是听力和阅读设置值可以包装在一个全局可访问的单例中(从你的任何地方)。你可以在你的应用程序初始化时初始化这个单一的,并且可以有简单的设置/获取接口(interface)。您仍然需要定义某种接口(interface),以便您可以监听更改。让单例类具有 API 来设置/删除这些接口(interface)。消费者可以设置/删除这些接口(interface),您可以决定接口(interface)的外观。
关于java - PreferenceFragment 的使用和架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308152/