gpt4 book ai didi

Fragment 内的 Android 共享首选项不起作用 - Kotlin

转载 作者:行者123 更新时间:2023-12-02 16:37:22 28 4
gpt4 key购买 nike

我花了几个小时研究并试图找到解决方案,但还是心血来潮。这是我在 stackoverflow 上的第一个问题。多年来,由于主题数量巨大,我不必提出自己的问题。

如果我做错了什么,请善待我。我会尽力提高提问能力。

我的问题是,它不会存储或读取首选项中的数据。它说它们不存在。我从谷歌获取了首选项屏幕的示例代码。里面有很多 fragment 。在其中一个 fragment 中,我捕获了首选项单击,并希望用它更改其他首选项之一的值。

下面你可以找到我的代码。

我认为问题出在 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 类位于其中SettingsActivity 类:AppCompatActivity()

这是由谷歌预先配置的,我假设这有点复杂。但我不知道也许我错了。

其他问题

如果您也想在这里帮助我,那么这个问题就排在首位。在 OnPreferenceTreeClick 内,我想获取最后一个已知位置。这已经在我的代码中起作用了。唯一的问题是,我似乎无法将 fusedLocationClient 放入类中。那里行不通。

因为在这个调用中:

 fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)

activity返回FragmentActivity?但是它需要Activity。

那么我怎样才能在这个 FragmentActivity 中获取我的 SettingsActivity 呢?

也许有伴生对象?我不知道。

感谢您的帮助。

最佳答案

经过几天的搜索,我终于自己找到了答案。如果有人遇到同样的问题,我会在这里发布。

在德国,我们有句话“Der Teufel steckt im Detail”;)大致翻译为“细节决定成败”

而不是调用此函数:

var sharedPref : SharedPreferences? = Activity?.getPreferences(Context.MODE_PRIVATE)

我们需要调用这个函数

val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)

然后剩下的就可以了。

关于Fragment 内的 Android 共享首选项不起作用 - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com