android - 代码的位置,以便 'SharedPreferences' 与 'onOptionsItemSelected' 一起使用

标签 android android-studio kotlin anko

我一直试图让这两个工作,但无论我如何重新排列代码,总是有一些提示:要么是一个尚未初始化的 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/

相关文章:

android - Android Studio 是如何启动 Gradle Daemon 的?

android - 禁用 Android 12 默认启动画面

Kotlin:将构造函数传递给函数式接口(interface)

android-studio - Android Studio 和正则表达式搜索(查找更多单词)

android-studio - 如何使用Android Studio将其他参数传递给自定义测试运行程序?

android - 在 Kotlin Multiplatform 上复制到剪贴板

java - imageView 在 Nexus 5 (Android 6.0) 中不显示

android - 从 AsyncTask Android 返回数据

java - 双引号中的字符串不会改变 Android Studio 中的颜色 - 只是好奇

java - 刷新 View Android