我花了很多时间研究并试图找到解决方案,但这是有道理的。所以这是我关于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()
这是由google预先配置的,我假设这有点复杂。但是我不知道也许我错了。
其他问题
如果您还想在这里帮助我,那么这个问题将排在最前面。
我要在OnPreferenceTreeClick
内获取最后的已知位置。
这已经在我的代码中起作用了。唯一的问题是,我似乎无法将fusedLocationClient
放在类中。
它在那里不起作用。
因为在此通话中:
fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
活动返回FragmentActivity吗?但是它需要活动。
那么我如何在FragmentActivity中获取我的SettingsActivity?
也许与companion object
有关系?
我不知道。
感谢您的帮助。
答案 0 :(得分:1)
经过几天的搜索,我终于找到了答案。 如果有人遇到同样的问题,我将在这里发布。
在德国,我们有一句俗语“ Der Teufel steckt im Detail”;) 大致翻译为“细节中有魔鬼”
代替调用此函数:
var sharedPref : SharedPreferences? = Activity?.getPreferences(Context.MODE_PRIVATE)
我们需要调用此函数
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
然后其余的工作。
答案 1 :(得分:0)
作为 2021 年 5 月的更新,PreferenceManager.getDefaultSharedPreferences 似乎已被弃用。
下面的 Kotlin 代码可以工作并在对话片段中进行了测试:
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
sharedPref?.edit()?.putInt(YOUR_SHARED_PREF_STRING_INDEX_VALUE, yourValueToStore)