기존에는 액티비티에서 결과를 받아올 때 startActivityForResult() 와 onActivityResult() 를 사용했지만 deprecated 되었다
'startActivityForResult(Intent!, Int): Unit' is deprecated. Deprecated in Java
Activity 클래스에서 사용할 수 있지만, AndroidX Activity와 Fragment에 도입된 Activity Result API 사용을 적극 권장한다고 한다
📌 MainActivity <-> SecondActivity 쌍방향으로 데이터 전달 가능
registerForActivityResult()는 ActivityResultContract 및 ActivityResultCallback을 가져와서 다른 활동을 실행하는 데 사용할 ActivityResultLauncher를 반환한다
val startForResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
val str = result.data?.getStringExtra("str")!!
Toast.makeText(context, Main 으로 돌아옴, Toast.LENGTH_SHORT).show()
}
}
class MainActivity : AppCompatActivity(){
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater).also {
setContentView(it.root)
}
with(binding){
btnSecond.setOnClickListener {
val intent =
Intent(this, SettingPriceActivity::class.java)
startForResult.launch(intent)
}
}
버튼 클릭 시 데이터를 받아 올 SecondActivity 를 실행한다
with(binding){
btnSend.setOnClickListener {
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("str","보낼 데이터")
}
setResult(RESULT_OK,intent)
finish()
}
}
참고 : https://developer.android.com/training/basics/intents/result#custom
https://developer88.tistory.com/351