在 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 中关闭输入流