【问题标题】:How to use PreferenceFragment settings in other fragments?如何在其他 Fragment 中使用 PreferenceFragment 设置?
【发布时间】:2021-07-09 17:18:52
【问题描述】:

我有一个包含 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)
}

}

fragment弹出正常,一切正常,但是我对SharedPreferences的理解不是很好(我试过看教程但是看不懂)。

如何存储和使用其他片段中的设置?

【问题讨论】:

  • 在这个Fragment中修改的设置会自动保存。您的 loadSettings 函数显示了检索设置值的正确方法,尽管在这里它没有意义,因为您没有对该值执行任何操作。

标签: android android-studio kotlin android-fragments androidx


【解决方案1】:

实际上SharedPreferences 是用于在其中存储小数据(首选字符串)。 从技术上讲,它是保存键值类型数据的 XML 文件。 您可以将SharedPreferences 设为静态并在您想要的任何地方使用它。 要获取共享首选项,请在您的 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,但会启动异步提交。

【讨论】:

  • 完美运行。我认为信息不能在片段之间轻松共享,当您说“我可以在任何我想要的地方使用它”时,我有点困惑,但随后出现了“共享首选项”这个名称,哈哈。谢谢!
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2016-07-08
  • 1970-01-01
  • 2014-10-03
相关资源
最近更新 更多