registerForActivityResult(contract) {result -> 결과 처리를 위한 람다함수}
-> registerForActivityResult()는 두가지의 Parameter를 받는다. (1)ActivityResultContract의 인스턴스 , (2)결과 처리를 위한 람다 함수
--> (1)ActivityResultContract
--> (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() 메서드 잊지말고 꼭 작성해주기.!
-> AppCompatActivity를 상속 받은 경우 ActivityResultLauncher 객체를 저장할 변수를 onCreate() 전에 선언을 해주고 사용해야 한다.