環境
Android Studio で、Empty Compose Activity を使用して空のプロジェクトを作成しています。Empty Compose Activity は、Android Studio のバージョンである Arctic Fox をインストールすることで表れます。
実装
Activity の状態が STARTED になる前に、registerForActivityResult
を使って ActivityResultLauncher
を作成します。今回は、Activity からの文字列をただ単に標準出力に出力することにします。
class MainActivity : ComponentActivity() {
private val startForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
println(it.data?.getIntExtra("PENGUIN", 0))
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Button(onClick = ::move) { Text("click me!") }
}
}
private fun move() {
val intent = Intent(this, SubActivity::class.java)
startForResult.launch(intent)
}
}
SubActivity は次のように実装します。
class SubActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Button(onClick = ::move) { Text("click me!") }
}
}
private fun move() {
val intent = Intent().apply { putExtra("PENGUIN", 100) }
setResult(Activity.RESULT_OK, intent)
finish()
}
}
まとめ
registerForActivityResult
を呼ぶタイミングに気をつけるだけで良さそうです。