在 Kotlin 中关闭应用程序后,如何将 onItemSelected 保留在选中的同一项目上?

Posted

技术标签:

【中文标题】在 Kotlin 中关闭应用程序后,如何将 onItemSelected 保留在选中的同一项目上?【英文标题】:How to keep onItemSelected on the same item selected after closing the app in Kotlin? 【发布时间】:2021-10-12 07:09:31 【问题描述】:

我正在用 Kotlin 翻译一个应用程序,用户可以在我创建的新 Activity 的两种不同语言之间进行选择:

@Suppress("DEPRECATION")
class Languages_Activity : AppCompatActivity() 
lateinit var spinner: Spinner
lateinit var locale: Locale
var back_btn: LinearLayout? = null
private var currentLanguage = "en"
private var currentLang: String? = null
override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_languages_)
    title = "KotlinApp"
    currentLanguage = intent.getStringExtra(currentLang).toString()
    spinner = findViewById(R.id.spinner)
    val list = ArrayList<String>()
    list.add("Select Language")
    list.add("English")
    list.add("Malay")

    val adapter = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, list)
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = adapter
    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener 
        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) 
            when (position) 
                0 -> 
                
                1 -> setLocale("en")
                2 -> setLocale("my")

            
        
        override fun onNothingSelected(parent: AdapterView<*>) 

    
    back_btn = findViewById(R.id.back_btn_language)

    back_btn?.setOnClickListener 
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    

private fun setLocale(localeName: String) 
    if (localeName != currentLanguage) 
        locale = Locale(localeName)
        val res = resources
        val dm = res.displayMetrics
        val conf = res.configuration
        conf.locale = locale
        res.updateConfiguration(conf, dm)
        val refresh = Intent(
            this,
            Languages_Activity::class.java
        )
        refresh.putExtra(currentLang, localeName)
        startActivity(refresh)
     else 
        Toast.makeText(
            this@Languages_Activity, "Language, , already, , selected)!", Toast.LENGTH_SHORT).show();
    

override fun onBackPressed() 
    val intent = Intent(Intent.ACTION_MAIN)
    intent.addCategory(Intent.CATEGORY_HOME)
    intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
    startActivity(intent)
    finish()
    exitProcess(0)


当我选择一种语言时,应用程序将显示所选语言的值,但是当我关闭应用程序并再次运行它时,选择将重置

即使在关闭应用程序并再次运行后,我如何才能保持选中项目?

【问题讨论】:

【参考方案1】:

你可以使用shared preferences

对于这个用例。

当您想要存储可以在应用关闭和打开之间保留数据的键值对时,共享首选项很有帮助。

仅当您在设置中清除应用数据或卸载应用时,此数据才会被删除

在你的 onCreate 中你可以添加这个 sn-p

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
val selectedLanguageIndex = sharedPref?.getInt("LANGUAGE_SELECTED", 0)?:0
spinner.setSelection(selectedLanguageIndex)

在您的 onItemSelected 中

val sharedPref = requireActivity().getPreferences(Context.MODE_PRIVATE)
with (sharedPref.edit()) 
    putInt("LANGUAGE_SELECTED", position)
    apply()

【讨论】:

当我添加它时,它显示“无法访问代码” 你现在可以试试。可能是因为return语句 感谢您的回答,一切正常【参考方案2】:

kotlin 有共享偏好系统。 当你必须记住一些选项直到改变时,它会有所帮助。

【讨论】:

以上是关于在 Kotlin 中关闭应用程序后,如何将 onItemSelected 保留在选中的同一项目上?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在过滤器后在 dispatcherServlet 中关闭输入流

即使在 Flask 中关闭浏览器后,如何将一个会话变量存储一段时间?

如何在 Swift 中关闭和完成处理程序后获取数据

如何在 Rails 中关闭 MySQL 严格模式

如何在cmd中关闭Mysql

在 PyQt 中关闭窗口后如何检索属性值?