我正在尝试在我的应用关闭时保存TextView
的文字内容,因此我尝试在onDestroy
方法中保存该信息,然后将其设置在onCreate
中方法。
我编写了以下两个函数来摆脱在共享首字母中获取和放置值的样板:
fun MainActivity.putStringInPrefs(prefsFile: String, key: String, value: Any) =
getSharedPreferences(prefsFile, Context.MODE_PRIVATE)
.edit()
.putString(key, value.toString())
.apply()
fun MainActivity.getStringFromPrefs(prefsFile: String, key: String, default: Any = "") : String =
getSharedPreferences(prefsFile, Context.MODE_PRIVATE).getString(key, default.toString())
当应用程序关闭时,这就是所谓的:
override fun onDestroy() {
super.onDestroy()
log("OnDestroy!")
putStringInPrefs(mainPrefsFile, "lastSelectedItemDescription", textViewItemDetailsTextView.text) }
log
只是Log.d("", "string")
在onCreate
中,这被称为:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) ; log("OnCreate!")
setContentView(R.layout.activity_main)
// Set up the item details text view
textViewItemDetailsTextView.text = getStringFromPrefs(mainPrefsFile, "lastSelectedItemDescription", detailsText)
问题在于,无论我做什么,都不保存首选项,并且始终在onCreate
中返回默认值。我已经尝试了申请和提交,有和没有明确。没有结果。我做错了什么。
答案 0 :(得分:1)
super.onDestroy()
应该是覆盖方法onDestroy()
中的最后一行。在执行“破坏性”代码后执行的任何代码上,您可能会遇到意外行为
答案 1 :(得分:1)
将Activity
状态保存在onDestroy()
中并不是一个好主意,因为系统可能会在不调用活动的最终onDestroy()回调的情况下终止托管您活动的进程。 (see docs)。
要保存状态,您可以改用onSaveInstanceState
/ onRestoreInstanceState
。请参阅:Saving and restoring activity state
override fun onSaveInstanceState(outState: Bundle?) {
outState?.putString(YOUR_TEXT, textView.text)
super.onSaveInstanceState(outState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
super.onRestoreInstanceState(savedInstanceState)
if (savedInstanceState != null) {
textView.text = savedInstanceState.getString(YOUR_TEXT)
}
}
companion object {
val YOUR_TEXT = "your_text"
}