android - 如何在其他 Fragment 中使用 PreferenceFragment 设置?
问题描述
我有一个包含 1 个设置的 PreferenceFragment。它使用以下代码定义(和调用):
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.settings, rootKey);
loadSettings()
}
private fun loadSettings() {
val sp = PreferenceManager.getDefaultSharedPreferences(this.context)
val safemode = sp.getBoolean("safemode", false)
}
}
片段正常弹出,一切都很好,但我对 SharedPreferences 没有很好的理解(我尝试阅读教程但我无法理解)。
如何存储和使用其他片段中的设置?
解决方案
实际上SharedPreferences
是用于在其中存储小数据(首选字符串)。从技术上讲,它是保存键值类型数据的 XML 文件。你可以让你的SharedPreferences
as static 并在你想要的任何地方使用它。要获得共享首选项,请在您的 Application/Activity/Fragment 中使用以下方法:
SharedPreferences prefs = this.getSharedPreferences(
"com.example.app.test", Context.MODE_PRIVATE);
阅读偏好:
String dummyKey = "dummyKey";
String l = prefs.getString(dummyKey, "default value");
编辑和保存首选项
String dt = getSomeString();
prefs.edit().putString(dummyKey, dt).apply();
commit()
如果值保存成功,则返回 true,否则返回 false。它将值同步保存到 SharedPreferences。
apply()
在 2.3 中添加,并且在成功或失败时不返回任何值。它会立即将值保存到 SharedPreferences,但会启动异步提交。
推荐阅读
- javascript - 使用 facebook 图形 API 时出现 CORS 错误
- c - openmp threadprivate 和 gcc __thread 兼容性
- android - 查看 Renderable build 导致程序崩溃
- mysql - 如何在sql中的数据库中获取记录的日期和未记录的日期
- javascript - 有没有办法在不涉及 Web API 的情况下编写异步代码/函数?
- javascript - 从基于 JavaScript 的过程定义中查找对象视图或表
- python - 对在保证 0 值时返回非零值的代码进行故障排除的建议
- oracle - 在 Oracle 中使用 CASE 将两行合并为一行
- callback - 在 Pyomo 中添加 Cplex 惰性约束
- mysql - MySQL程序不会让我设置变量值