2022 Feb. 26.
2021 Nov. 14.
2021 Oct. 31.
出典
onSaveInstanceStateについてちゃんと知る - Qiita
Bundleの保存・読み込み
onSaveInstanceStateはonPauseの直後に呼ばれる。
onSavedInstanceStateで保存した値は、onCreateもしくはonRestoreInstanceStateで復元が可能。
onRestoreInstanceStateはonStartの直後に呼ばれるが、常に呼ばれるわけではなく、保存後にActivityが破棄された次のライフサイクルのタイミングでのみ呼ばれる。
画面回転対応
onSaveInstanceStateでデータをBundleに保存する。
onRestoreInstanceStateでBundleからデータを読み込む。
sample kotlin code
// 画面表示情報保存 override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) val textView1Str = binding.textView1.text.toString() outState.putString("textView1key", textView1Str) } // 画面表示情報再表示 override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) binding.textView1.text = savedInstanceState.getString("textView1key", "") }
MainActivityとダイアログとの間のBundleを利用したデータ受け渡し
MainActivityで、Bundleを利用して、開こうとするダイアログにデータを渡すkotlinコード例
val str01 = "ab"
val int01 = 12
val args = Bundle()
args.putString("String01", smbDomain)
args.putInt("Integer01", int01)
val myDialogFragment = MyDialogFragment()
myDialogFragment.setArguments(args)
myDialogFragment.show(supportFragmentManager, "my")
ダイアログで、開く時にBundleからデータを取り出すkotlinコード例
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val editTextStr01 = myDialogView.findViewById<EditText>(R.id.editTextStr01)
val editTextInt01 = myDialogView.findViewById<EditText>(R.id.editTextInt01)
editTextStr01.setText(requireArguments().getString("String01", ""))
editTextInt01.setText(requireArguments().getInt("Integer01", 0).toString())
}