当我的应用关闭时,我试图保存 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
中返回默认值 . 我已经尝试了申请和提交,有和没有明确 . 没有结果 . 我究竟做错了什么 .
2 回答
super.onDestroy()
应该是重写方法onDestroy()
中的最后一行 . 在执行"destructive"代码后执行的任何代码上,您可能会遇到意外行为在
onDestroy()
中保存Activity
状态并不是一个好主意,因为系统可能会在不调用活动的最终onDestroy()回调的情况下终止托管您活动的进程 . (see docs) .要保存状态,您可以使用
onSaveInstanceState
/onRestoreInstanceState
代替 . 见:Saving and restoring activity state