android - Fragment 中的 Android 共享首选项不起作用 - Kotlin
问题描述
我已经花了几个小时研究并试图找到解决方案,但还是有条不紊的。所以这是我关于stackoverflow的第一个问题。多年来,由于话题太多,我可以不用问自己的问题。
如果我做错了什么,请善待我。我会尽我所能提高提问的能力。
我的问题是,它不会存储或读取首选项中的数据。它说它们不存在。我从 google 获取了首选项屏幕的示例代码。里面有很多碎片。在其中一个片段中,我捕获了一个偏好点击,并想用它来更改其他偏好之一的值。
跟随你找到我的代码。
我认为问题出在 AlveolPreferencesFragment 的 onPreferenceTreeClick 上。
感谢您的所有帮助以及您在不知道您这样做之前给我的所有帮助:))
Alveol_Preferences XML
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
app:title="@string/heart_alveol">
<EditTextPreference
app:key="latitude"
app:dialogTitle="@string/latitude_summary"
app:useSimpleSummaryProvider="true"
app:title="@string/latitude"
app:defaultValue="-34.0"/>
<EditTextPreference
app:key="longitude"
app:dialogTitle="@string/longitude_summary"
app:useSimpleSummaryProvider="true"
app:title="@string/longitude"
app:defaultValue="151.0"/>
<Preference
app:key="gpsheart"
app:title="@string/gpsheart"
app:summary="@string/gpsheart_summary"/>
</PreferenceCategory>
</androidx.preference.PreferenceScreen>
类 AlveolPreferencesFragment
class AlveolPreferencesFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.alveol_preferences, rootKey)
}
override fun onPreferenceTreeClick(preference: Preference): Boolean {
return when (preference.key) {
"gpsheart" -> {
var sharedPref : SharedPreferences? = activity?.getPreferences(Context.MODE_PRIVATE)
val editor = sharedPref?.edit()
editor?.putString("latitude", "Test").apply()
val text = sharedPref?.getString("longitude","Longitude doesn't exist")
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(context, text, duration)
toast.show()
true
}
else -> {
super.onPreferenceTreeClick(preference)
}
}
}
AlveolPreferencesFragment 类位于此内部
class SettingsActivity : AppCompatActivity()
这是由谷歌预先配置的,我假设这有点复杂。但我不知道也许我错了。
附加问题
如果您也想在这里帮助我,这个问题就排在首位。在里面OnPreferenceTreeClick
我想得到最后一个已知的位置。这已经适用于我的代码。唯一的问题是,我似乎无法将内容放在fusedLocationClient
课堂上。它不会在那里工作。
因为在这个调用中:
fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
Activity返回FragmentActivity?但它需要Activity。
那么如何在这个 FragmentActivity 中获取我的 SettingsActivity 呢?
也许有什么companion object
?我没有任何线索。
谢谢您的帮助。
解决方案
经过几天的搜索,我终于自己找到了答案。如果有人有同样的问题,我会在这里发布。
在德国,我们有一句谚语“Der Teufel steckt im Detail”;)大致翻译为“魔鬼在细节中”
而不是调用此函数:
var sharedPref : SharedPreferences? = Activity?.getPreferences(Context.MODE_PRIVATE)
我们需要调用这个函数
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
然后其余的工作。
推荐阅读
- java - 如何在 android studio 中修复“IllegalStateException”(致命异常)?
- javascript - 有时代码未显示在 Visual Studio 代码的自动完成列表中,解决方案?
- amazon-web-services - 避免存储在 s3 存储桶上的 http 内容在浏览器中被破坏
- c# - 拼写检查 en-GB 不适用于日文键盘
- python - 无法使用 python 脚本切换 gcloud 平台帐户
- java - 如何使用apache poi将excel中的滚动条限制为最大行大小?
- asp.net - 如何设计一个带有空白第一行的数据源的gridview或表格,我们可以在asp.net中搜索表格列?
- bash - 通过校验和查找目录中修改过的文件
- javascript - 为什么 XMLHttpRequestEventTarget.onerror 在同步请求中不起作用?
- enterprise-library - .Net framework 4.8 会支持微软企业库 v6.0 吗?