Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

이곳저곳 관심이 많아요

10. Intent : MainActivity <-> SubActivity 최종 본문

Programming/Android

10. Intent : MainActivity <-> SubActivity 최종

킹수맨 2021. 12. 5. 18:27
  1. 메인에서 registerForActivityResult 메소드 정의
  2. 메인에서 서브엑티비티 인텐트 생성하고 메인에서 열어주기
  3. 서브엑티비티에서 메인엑티비티 인텐트 객체 생성하고, 필요한 데이터를 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))

 

Comments