'SharedPreferences' 与 'onOptionsItemSelected' 一起工作的代码位置
Location of code so that 'SharedPreferences' works with 'onOptionsItemSelected'
我一直在努力让这两个工作,但无论我如何重新安排代码,总是有一些抱怨:要么是一个没有初始化的变量,要么是一个有趣的东西。
这是有问题的片段:
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")
}
var 'sp' 需要在它所在的位置(对吗?)。 fun'store units'也放ok了。但是,我不能将 'override fun onOptionsItemSelected' 放在另一个 override 函数中;但如果我把它放在外面,它就不能与其他两个一起使用。
请帮忙..
onOptionsItemSelected 方法和您的 storeUnits 方法都应该在 onCreate 方法之外。您可以改为使 sp 成为全局变量:
在您的 onCreate 方法之前将此声明为全局变量(在 activity class 内部但在 onCreate 外部):
lateinit var sp : SharedPreferences
然后在onCreate方法中初始化:
sp = this.getSharedPreferences("com.example.downloadtest",0 )
我一直在努力让这两个工作,但无论我如何重新安排代码,总是有一些抱怨:要么是一个没有初始化的变量,要么是一个有趣的东西。
这是有问题的片段:
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")
}
var 'sp' 需要在它所在的位置(对吗?)。 fun'store units'也放ok了。但是,我不能将 'override fun onOptionsItemSelected' 放在另一个 override 函数中;但如果我把它放在外面,它就不能与其他两个一起使用。 请帮忙..
onOptionsItemSelected 方法和您的 storeUnits 方法都应该在 onCreate 方法之外。您可以改为使 sp 成为全局变量:
在您的 onCreate 方法之前将此声明为全局变量(在 activity class 内部但在 onCreate 外部):
lateinit var sp : SharedPreferences
然后在onCreate方法中初始化:
sp = this.getSharedPreferences("com.example.downloadtest",0 )