안드로이드 스튜디오에서 requestCode를 쓰는 이유는 각 액티비티를 구별하고 데이터를 좀 더 원활히 주고받을 수 있도록 하기 위해서이다. 둘 중 한 가지를 꼽자면 그냥 액티비티를 구별하기 위해서이다.
requestCode를 쓰려면 startActivityForResult()를 호출해야한다.
참고로 원래 Intent 쓰는 법을 보자면,
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
이런 식으로 startActivity에 intent를 넣어주면 그만이다.
하지만 requestCode를 주고받으려면 쓸 수가 없다. 그래서 사용하는 것이 startActivityForResult()이다. 이에 대해 짧게 말해보자면, 응답하는 활동은 결과를 반환하도록 설계되어야 하고, 활동은 또 다른 Intent 개체로 결과를 전송해야 한다. 또한 이 활동은 onActivityResult() 콜백에서 결과를 수신해야 한다.
위의 내용은 이해하기 어려우므로 풀어서 설명을 써보겠다.
startActivityForResult의 쓰는 법을 간단한 예를 들어 보여주자면,
val intent = Intent(this, MainActivity::class.java)
startActivityForResult(intent, 2000)
위의 코드를 보면 알다시피 정수인수가 추가로 들어간다. 이 정수인수는 요청을 식별하는 '요청 코드'라고 생각하면 쉽다. 이 인수가 쓰일 때는 현재 액티비티에서 여러 개의 activity를 실행하고 각 액티비티에서 결과를 받을 때 쓰인다고 보면 된다.
만약 사용자가 후속 활동을 마치고 돌아오면, 시스템은 활동의 onActivityResult() 메소드를 호출한다.
onActivityResult() 메소드에는 3가지의 인수가 필수적으로 들어간다.
- requestCode : Int / startActivityForResult()에 전달한 요청 코드를 의미
- resultCode : Int / 두 번째 활동이 지정한 결과코드를 의미
- data : Intent / 결과 데이터를 전달하는 Intent
이어서 onActivityResult() 메소드 예를 보여주자면,
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == 2000){
if(resultCode == 1000){
...
}
...
}
}
이런 식으로 사용할 수 있다.
그렇다면 resultCode는 어디서 보내지는 지에 대해 알아보자.
먼저 간단하게 이해를 돕기위해 activity A, B 두 개가 있다고 가정하고 그 사이에 requestCode와 resultCode를 쓴다고 하면, 틀이 이렇게 될 것이다.
액티비티 A에서 B로 넘어갈 때에 requestCode 1000을 함께 발생시킨다.
그리고 B에서 예를 들어 특정버튼을 눌렀을 경우 화면이 꺼진다고 한다면, btn.setOnClickListener 이벤트를 이용하여 그 안에 resultCode 2000을 A로 넘겨 다시 A로 돌아왔을 때 onActivityResult 메소드가 발생이 된다.
이 메소드의 인자는 requestCode, resultCode, data로 총 세개이고 if문을 사용하여 아까 발생시킨 requestCode 1000값이 맞을 경우, B에서 보내진 resultCode 2000 값이 맞을 경우로 코드를 짤 수 있다.
참고로 setResult 없이도 그냥 requestCode만 사용하여도 가능하다.
이렇듯 requestCode는 다른 액티비티로 부터 값을 주고받을 때 뿐만 아니라, 응답 활동을 바로 결과 전송이 가능하다는 장점이 있다. 예를 들어 메인액티비티에서 여러 다른 액티비티들을 실행할 수 있고, 각 액티비티에서 결과를 받아야하는 경우에 사용하면 구분하기 쉽다.
ex) 쌓여있는 화면 여러개 한 번에 종료시킬 경우(ex. 설문조사 완료 시 액티비티를 종료시켜서 메인으로 돌아가게끔 하는 앱)
'Android Studio > Kotlin' 카테고리의 다른 글
Android Studio 리사이클러뷰 아이템 클릭 시 화면 전환(서버연결시) (2) | 2020.11.02 |
---|---|
Android Studio 리사이클러뷰 생성 (Kotlin) (0) | 2020.07.23 |
Koltin의 특징 (0) | 2020.03.24 |
Android Studio Bottom navigation(Kotlin) (0) | 2020.03.23 |
Fragment에서 Activity로 화면전환 (0) | 2020.03.01 |
댓글