【发布时间】:2019-02-18 09:55:46
【问题描述】:
我已经花费了数小时研究并试图找到解决方案,但我坚持不懈。所以这是我关于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?
我不知道。
感谢您的帮助。
【问题讨论】:
-
融合位置你试过
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(activity!!.applicationContext) -
嘿,Tejas,就像一个魅力!谢谢!!在这个上也花了至少 3 个小时;)现在我得到了片段内的位置。我还不能投票给答案。但这是正确的解决方案。
-
没有问题亚历克斯。你得到了更重要的解决方案。
-
现在你能详细说明一下吗?您优先面临什么问题。
It says that they don't exist是什么意思。您可以发布错误或其他内容吗? -
在 XML 中,我定义了键经度。在代码中,我尝试读取该值。但相反,它给了我默认值:“经度不存在”所以不知何故它无法访问 sharedPreferences。我在虚拟设备和普通安卓设备上进行了测试。 Android 调试器没有显示任何错误。
标签: android android-fragments android-activity kotlin