'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 )