이곳저곳 관심이 많아요
10. Intent : MainActivity <-> SubActivity 최종 본문
- 메인에서 registerForActivityResult 메소드 정의
- 메인에서 서브엑티비티 인텐트 생성하고 메인에서 열어주기
- 서브엑티비티에서 메인엑티비티 인텐트 객체 생성하고, 필요한 데이터를 Bundle로 넣어준 후, setResult로 호출 결과를 돌려줌
- 메인엑티비티에서 registerForActivityResult 메소드를 정의해서 startForResult 변수에 넣어준다.
registerForActivityResult == 결과를 돌려받았을 때 결과를 처리하는 메소드
private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> if (result.resultCode == Activity.RESULT_OK) { //엑티비티 결과값이 ok이고 if (result.data != null) { //인텐트 자체도 null 이 아닐 때 val extras: Bundle? = result.data?.extras //result.data == Intent, result.data.extras == Bundle bundleData = extras?.getInt(RETURN_CHECK,0)?:0 } } }
- 위에서 만든 startForResult 를 사용해서MainActivity에서 SubActivity를 열어준다.
var subIntent = Intent(this,SubActivity::class.java) subIntent.putExtra(EXTRA_MESSAGE,data) //data는 Bundle에 넣어줄 값 startForResult.launch((subIntent)) //괄호 두개 유의하기
- 서브엑티비티에서 메인엑티비티 인텐트 객체 생성하고, 필요한 데이터를 Bundle로 넣어준 후, setResult로 호출 결과를 돌려줌
val data = Intent() //MainActivity Intent객체 생성, Sub->Main 일때는 파라미터필요없음 data.putExtra(RETURN_CHECK,1) //원하는 데이터 넣어줌 setResult(Activity.RESULT_OK,data) //엑티비티 호출 결과를 반환
companion object로 구현 : 캡슐화를 위해
- SubActivity에 companion object 생성하고, 그 안에 MainActicity가 SubActivity에게 intent를 요청하는 코드를 별도의 메소드로 만든다.
companion object{ fun newIntent(context: Context,data: Int):Intent{ return Intent(context,SubActivity::class.java).putExtra(EXTRA_MESSAGE,data) } }
- MainActivity에서 위에서 만든 메소드 불러와 실행
var i: Intent = SubActivity.newIntent(this,data) startForResult.launch((i))
'Programming > Android' 카테고리의 다른 글
11. Fragment (0) | 2021.12.07 |
---|---|
11. RecyclerView : 리사이클러뷰 전체정리, ViewModel 적용 (0) | 2021.12.03 |
10. Intent : Implicit intent (0) | 2021.11.05 |
10. Intent : MainActivity -> SubActivity 값 전달 (0) | 2021.11.05 |
Comments