[Android/Kotlin] registerForActivityResult() 사용하기 / startActivityForResult Deprecated

SoyoungLee·2022년 5월 25일
1

안드로이드/코틀린

목록 보기
22/68
post-thumbnail

💌 [안드로이드/코틀린] registerForActivityResult() 사용하기

기존에는 액티비티에서 결과를 받아올 때 startActivityForResult() 와 onActivityResult() 를 사용했지만 deprecated 되었다

'startActivityForResult(Intent!, Int): Unit' is deprecated. Deprecated in Java

Activity 클래스에서 사용할 수 있지만, AndroidX Activity와 Fragment에 도입된 Activity Result API 사용을 적극 권장한다고 한다

📌 MainActivity <-> SecondActivity 쌍방향으로 데이터 전달 가능

💜 Activity Result에 콜백 등록 (MainActivity.kt)

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 를 실행한다

💜 데이터를 보냄 (SecondActivity.kt)

 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

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글