[Android/Kotlin] registerForActivityResult - 다른 Activity로 이동했다가 돌아올 때 Data를 받아오기

코코아의 개발일지·2023년 11월 29일
0

Android-Kotlin

목록 보기
18/31
post-thumbnail

✍🏻 요구사항 분석

화면을 이동할 때는 데이터를 넘겨주는 방법이 많다.
그렇다면 화면을 이동하고 다시 돌아올 때는 데이터를 넘겨줄 수 없을까?
오늘 다룰 부분은, 이를 가능하게 하는 registerForActivityResult이다.


💻 코드 작성

MainActivity -> SongActivity로 이동하는 상황이다.

MainActivity.kt

companion object { const val STRING_INTENT_KEY = "song_key" }

private val getResultText = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) {result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val returnSong = result.data?.getStringExtra(STRING_INTENT_KEY)
            // 받아온 앨범 제목으로 토스트 메시지 띄우기
            Toast.makeText(this, returnSong, Toast.LENGTH_SHORT).show()
        }
    }
    
private fun initClickListener() {
        Log.d("Song", "${songs[nowPos].title} - ${songs[nowPos].singer}")

        binding.mainPlayerCl.setOnClickListener {
            savedId()
            val intent = Intent(this, SongActivity::class.java)

            val gson = Gson()
            val songJson = gson.toJson(songs[nowPos])
            intent.putExtra("song", songJson)
//            startActivity(intent)
			// SongActivity에서 돌아올 때 받은 앨범 제목
            getResultText.launch(intent)
        }
    }

돌아올 때 데이터를 전달하는, registerForActivityResult를 사용하려면 startActivity(intent) 말고 getResultText.launch(intent)를 사용해야 한다.

SongActivity.kt

private fun initClickListener() {
        /* 뒤로가기 버튼 */
        binding.songDownIv.setOnClickListener {
            sendAlbumTitle()
            finish()
        }
}

private fun sendAlbumTitle() { // MainActivity로 돌아갈 때 다시 데이터를 넘기는 부분
        val intent = Intent(this, MainActivity::class.java).apply {
            putExtra(MainActivity.STRING_INTENT_KEY, "${binding.songTitleTv.text}_${binding.songSingerTv.text}")
        }
        setResult(Activity.RESULT_OK, intent)
    }

여기서 setResult() 부분을 주의깊게 보면 될 것 같다.

이렇게 되면 앞선 MainActivity의 registerForActivityResult 부분에 의해, setResult()로 보낸 OK를 지녔다면 받아온 앨범 제목을 이용해 토스트 메시지를 띄울 수 있다.


📚 참고 자료

profile
우당탕탕 성장하는 개발자

0개의 댓글