[안드로이드스튜디오_문화][registerForActivityResult]

기말 지하기포·2023년 9월 28일
0

registerForActivityResult(contract) {result -> 결과 처리를 위한 람다함수}

-> registerForActivityResult()는 두가지의 Parameter를 받는다. (1)ActivityResultContract의 인스턴스 , (2)결과 처리를 위한 람다 함수

--> (1)ActivityResultContract

---> 아래 문서에서 필요한 계약을 찾아보면 됨.ㅋhttps://developer.android.com/reference/kotlin/androidx/activity/result/contract/ActivityResultContracts

--> (2)결과 처리를 위한 람다 함수 (콜백함수임)

-> registerForActivityResult()의 반환값은 "ActivityResultLauncher의 객체"인데, 여기에 우리가 원하는 로직을 수행 할 수 있는 많은 정보들이 담겨져 있음.(ex : ActivityResultContracts - 안드로이드에서 Activity의 결과를 처리할 수 있는 여러 유형의 계약을 정의해놓은 클래스.에서 하나 선택해서 사용하면 됨.)이것을 람다식에서 받아서 사용한다.

-> registerForActivityResult()는 특정 Activity 또는 Fragment의 실행 결과를 받아오는데데 사용되는 API이다.

--> 주의!!

---> registerForActivityResult() : "다른 특정 Activity 또는 Fragment의 실행 결과를 받아와서 람다식에서 결과를 사용한 다른 로직들을 수행할 수 있는 정보를 가진 ActivityResultLauncher 객체"를 반환한다.

---> .launch() 메서드는 registerForActivityResult()의 반환값인ActivityResultLauncher 객체를 실행시키는데 (다른 Activity 또는 Fragment로 이동시킴.) launch() 메서드가 종료되면 registerForActivityResult의 콜백 람다 함수가 실행된다.(실제 결과 처리가 이루어지는 부분) : 주의!! Parameter로 Intent 객체가 도착한다.

-> 아래는 예시 코드임 ㅋ



-> Intent(현재 Activity 또는 Fragment : this로 표현함 , 이동할 Activity 또는 Fragment)

: 이동할 Activity 또는 Fragment에서의 실행 결과를 현재 Activity 또는 Fragment로 받아오는 걸 알려주는 Parameter 설정.

ActivityResultLauncher 객체의 launch(it) 메서드를 호출하면 : ActivityResultLauncher가 작업(여기서는 it로 표시된 Intent)을 실행하고(다른 Activity 또는 Fragment로 이동해서 해당 Activity 또는 Fragment를 실행 시켜서 나온 결과를 받아옴), 해당 작업이 완료될 때 "해당 결과"를 처리하기 위한 콜백 함수( {rusult -> ...} 이 코드 블락)가 호출됩니다

사용방법

1.Intent(현재 Activity 또는 Fragment , 이동할 Activity 또는 Fragment)객체 생성
2.registerForActivityResult(ActivityResultContracts에서 하나 선택) { result -> 결과 처리 람다 콜백 함수 작성}
3.이동한 Activity 또는 Fragment에서 결과를 출발 Activity 또는 Fragment에 보낼 때는 인텐트 객체를 생성하는데, 다음과 같은 방법으로 인텐트 객체를 생성하면 된다. Intent().자료형에 알맞는 put 메서드("name"Parameter : 받을 때 확인할 포장지 이름 , 보내는 선물)
4.setResult(RESULT_OK,intent) finish() 메서드 잊지말고 꼭 작성해주기.!

공식문서 -> https://developer.android.com/training/basics/intents/result?hl=ko

-> AppCompatActivity를 상속 받은 경우 ActivityResultLauncher 객체를 저장할 변수를 onCreate() 전에 선언을 해주고 사용해야 한다.

profile
포기하지 말기

0개의 댓글