java - PreferenceFragment 的使用和架构

标签 java android

在我的应用程序中,我有偏好:“pref1”,可能的值为 0、1、2。我在 SharedPreferences 类的帮助下保存它们。

  1. 我想提供一个用户界面来改变它。我创建类 SettingFragment extends PreferenceFragment 和带有 PreferenceScreen 根的 xml 文件。在 xml 文件中,我必须设置 android:key 字段以绑定(bind) UI 和 SharedPreferences

  2. 要在用户更改“pref1”后更改我的应用程序行为,我必须实现 OnSharedPreferenceChangeListener

  3. 同样在程序开始时我需要获取“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/

相关文章:

android - Google Play 不接受 Apache Cordova

android - 旁遮普文字在手机上无法正确显示

php - 使用 php volley 库从服务器获取大量 json 数据花费太多时间

java - 尝试用 JPanel 绘制一个简单的矩形,但没有显示任何内容

java - 映射到应用程序根目录 "/"失败,但除此之外正常

java - Lucene_36 - 无法解析或不是字段

java - 你将如何处理重写方法的异常

java - 如何在 Android TV 上获取位置

java - 应用程序无法通过 Android Studio 启动

java - 如何将报告导出为 PDF/A-1a、PDF/A-1b?