メモ:
・画面遷移だけであればstartActivity()でOK
・データのやり取りは共通のIDを使って行う
・遷移先の要素のIDを探して直接書き込む手法などもある。xmlでレイアウトしている場合など?
データをやりとりするための共通のIDなどを定義
//メッセージに割り当てる識別文字列 companion object { const val EXTRA_MESSAGE = "message_no_shikibetsu_id" } //SubActivityに割り当てる任意のID private val RESULT_SUBACTIVITY = 9999
ボタンを押してTimeDialogクラスに遷移。ボタンのテキストを遷移先に渡す
button.setOnClickListener { val intent = Intent(this, TimeDialog::class.java) intent.putExtra(EXTRA_MESSAGE, button.text) startActivityForResult(intent, RESULT_SUBACTIVITY) }
遷移先から戻る。strをメッセージとして遷移元に渡す
//遷移元から値を受け取る val message = intent.extras?.getString(MainActivity.EXTRA_MESSAGE) ?: "Null" //戻るボタンを押して遷移元に戻る。strをメッセージとして遷移元に渡す back.setOnClickListener { val intentSub = Intent() val str = ”some message” intentSub.putExtra(MainActivity.EXTRA_MESSAGE, str) setResult(Activity.RESULT_OK, intentSub) finish() }
MainActivity.ktで遷移先のfinish()に対応してデータを受け取る
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) { super.onActivityResult(requestCode, resultCode, intent) if (resultCode == Activity.RESULT_OK && requestCode == RESULT_SUBACTIVITY && intent != null) { // メッセージの受け取り val res = intent.extras?.getString(EXTRA_MESSAGE)?: "Null" } }