Android - Activity에서 Intent를 통해 데이터를 전달하고 받아오기 (Kotlin)

업데이트:

  • 연구주제 : Android - Activity에서 Intent를 통해 데이터를 전달하고 받아오기 (Kotlin)
  • 연구목적 : 안드로이드에서의 코틀린 활용
  • 연구일시 : 2020년 03월 20일 09:00~17:00
  • 연구자 : 이재환 ljh951103@naver.com
  • 연구장비 : HP EliteDesk 800 G4 TWR, Kotlin, Android studio, IntelliJ
  • 관련연구 : Java, Android, Kotlin, Activity, Intent


서론

안드로이드에서 액티비티를 이동할 때, startActivity()을 이용하여 이동할 수 있다.
이번에는 기본적인 화면이동말고 데이터를 전달하고, 다시 데이터를 얻어오는 로직에 대해 다루어본다.


본론

화면 이동 및 데이터 전달

다음과같이 intent 객체에 putExtra를 통해 값을 전달한다.
첫 번째 인자는 받은 값을 식별할 이름이고 두 번째 인자는 전달할 데이터이다.
그리고 startActivityForResult(intent, 100) 를 통해 화면 이동과 동시에 코드 100을 저장한다.
이 코드는 다시 결과데이터를 받을 때, 식별하기위해 사용한다.

val intent = Intent(this, PhotoViewPager::class.java)
                intent.putExtra("photo_num", num)
                intent.putExtra("thumbnail", PhotoData.photo_id)
                startActivityForResult(intent, 100)


이동된 액티비티에서 데이터 전달받기

다음과 같이 getExtra를 통해 식별 이름을 입력하여 데이터를 전달받을 수 있다.
두 번쨰 인자는 초기 default 값이다.

 fun getExtra(){
        if (intent.hasExtra("photo_num") && intent.hasExtra("photo_list")) {
            thumbnail = intent.getLongExtra("thumbnail", 0)
            index = intent.getIntExtra("photo_num", 0)
        }
        else {
            Toast.makeText(this, "전달된 이름이 없습니다", Toast.LENGTH_SHORT).show()
        }
    }


이동된 액티비티에서 다시 데이터 전달하기

이번 예제에서는 백버튼을 통해 구현했다.
이동된 액티비티에서 다시 데이터를 전달하려면 입력 데이터를 똑같이 putExtra로 준다.
그리고 결과 코드와 함께 setResult() 를 호출하고 종료한다.

    override fun onBackPressed() {
        val intent = Intent()
        intent.putExtra("index", index)
        setResult(Activity.RESULT_OK, intent)
        finish()
    }


원래 액티비티에서 데이터 전달받기

resultCode는 이전에 setResult()에서 입력했던 코드가 된다.
requestCode는 처음 액티비티를 이동할 떄, 입력했던 코드다.

이 두 조건에 해당하게되면 바로 이 구간에서 다음과 같이 데이터를 전달받는다.

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK) {
            when (requestCode) {
                100 -> {
                    val doc = data!!.getIntExtra("index", 0)
                }
            }
        }
    }

결론

이렇듯 액티비티로 화면전환만 가능한게 아니라 데이터를 전송할 수도 있고, 마찬가지로 데이터를 전달받아서 동작을 처리할 수도 있다.


향후과제


참고자료

https://lktprogrammer.tistory.com/151


Writer: Jae-Hwan Lee

댓글남기기