val list=ArrayList<Int>()
list.add(1)
list.add(2)
val list2=ArrayList<Int>()
list2.add(3)
list2.add(4)
먼저 전달할 기본 리스트를 생성해준다.
Intent 생성 시 context는 this로 받아주고, 이동할 액티비티를 지정한다.
val intent = Intent(this, MainActivity::class.java)`
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)
}
기본 브라우저가 생성되어 요청한 웹이 뜨게 된다.
Bundle은 값을 저장하는 Map형태의 클래스이다.
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를 가져온다
참고
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