[Android] 액티비티나 프래그먼트 간 데이터 전달하기(Intent/Bundle)

김민주·2022년 12월 12일
0

Android

목록 보기
17/21

Activity로 data를 전달하는 경우

  • Intent를 사용

val list=ArrayList<Int>()
     list.add(1)
     list.add(2)
val list2=ArrayList<Int>()
     list2.add(3)
     list2.add(4)

먼저 전달할 기본 리스트를 생성해준다.


Intent 생성 시 context는 this로 받아주고, 이동할 액티비티를 지정한다.


Activity -> Activity

val intent = Intent(this, MainActivity::class.java)`

Fragment -> Activity

val intent = Intent(requireActivity(), MainActivity::class.java)

프래그먼트는 context가 없기 때문에 부모 액티비티를 부른다.
requireActivity()은 액티비티가 있다는 것을 보장한다.
null을 리턴하지 않고 Exception을 던진다.

intent.apply { 
                this.putExtra("list",list) // [1,2]
                this.putExtra("list",list2) // [3,4]
            }
            startActivity(intent)

putExtra는 거의 모든 타입에 대해 오버로딩되어있다!
커스텀 클래스나 오브젝트, 배열, 리스트까지 가능하다!

val list = intent.getIntegerArrayListExtra("list")

받을 때는 get타입Extra 통해 받을 수 있다.

이렇게 받게된 list를 찍어보면 덮어씌워져서 내가 만든 ArrayList<Integer>[3,4]가 전달된 것을 볼 수 있다.


인텐트로 활동을 시작할 때에는 startActivity()를 호출하여 시스템으로 보낸다.

버튼 클릭 시 나의 벨로그 화면으로 전환시키고 싶다면?

binding.btnNext.setOnClickListener {
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://velog.io/@minju0426"))
            startActivity(intent)
        }

기본 브라우저가 생성되어 요청한 웹이 뜨게 된다.




Fragment로 data를 전달하는 경우

  • Bundle을 사용

Bundle은 값을 저장하는 Map형태의 클래스이다.


Fragment -> Fragment

val bundle = Bundle()
            bundle.apply {
                this.putIntegerArrayList("list",list)
                this.putIntegerArrayList("list",list2)
            }
            navController.navigate(R.id.action_mainFragment_to_questionFragment,bundle)
        }

번들에 전달할 객체를 담은 뒤, navigate() 함수에 담아 보낸다.

var list = arguments?.getIntegerArrayList("list")
        Log.d("Bundle로 받은 것은?", list.toString())

받을 때는 arguments에서 get타입 함수를 사용한다
arguments는 Bundle? 타입으로 프래그먼트의 argument를 가져온다


Activity -> Fragment




참고
https://developer.android.com/training/basics/intents/sending?hl=ko,
https://velog.io/@jinny_0422/Android-Fragment-Activity%EA%B0%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%84%EB%8B%AC#-fragmentactivity---activity

profile
𝐃𝐨𝐧'𝐭 𝐛𝐞 𝐚 𝐩𝐫𝐨𝐜𝐫𝐚𝐬𝐭𝐢𝐧𝐚𝐭𝐨𝐫💫

0개의 댓글