rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 Bundleを利用したデータの受け渡し

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())
}