我一直试图让这两个工作,但无论我如何重新排列代码,总是有一些提示:要么是一个尚未初始化的 var,要么是一个有趣的东西。
这是有问题的 fragment :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var sp : SharedPreferences = this.getSharedPreferences("com.example.downloadtest",0 )
fun storeUnits(unit:String){
sp.edit().putString("units", unit).apply()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
super.onOptionsItemSelected(item)
if (item.itemId == R.id.settings){
//toast("Settings clicked")
alert("Choose Units") {
title = "Units"
positiveButton("Imperial") {
toast("Imperial Measurements Chosen")
storeUnits("imperial")
}
negativeButton("Metric") {
toast("Metric Measurements Chosen")
storeUnits("metric")
}
变量 'sp' 需要在它所在的位置(对吗?)。乐趣 '商店单位' 放置也ok。但是,我无法放置 '覆盖乐趣 onOptionsItemSelected' 在另一个 覆盖 功能;但如果我把它放在外面,它不适用于其他两个。请帮忙..
最佳答案
onOptionsItemSelected 方法和您的 storeUnits 方法都应该是 外 onCreate 方法。你可以改为 sp 一个全局变量:
在您的 onCreate 方法之前将其声明为全局变量(在 Activity 类内部但在 onCreate 外部):
lateinit var sp : SharedPreferences
然后在 onCreate 方法中初始化它:sp = this.getSharedPreferences("com.example.downloadtest",0 )
关于android - 代码的位置,以便 'SharedPreferences' 与 'onOptionsItemSelected' 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64342448/