plugins {
id 'androidx.navigation.safeargs.kotlin'
}
module 단위의 그래들에 플러그인을 추가해준다.
이제 데이터를 받을 쪽에서
Arguments를 추가할 수 있다.
❗ 단, Arguments의 이름의 첫글자를 대문자로 설정할 경우 오류가 나니 주의해야한다.
일반적인 자료형은 그냥 사용할 수 있으나
Data class를 사용하기 위해서는 Parcelable 를 사용해야한다.
Parcelable 사용하기
plugins {
id 'kotlin-parcelize'
}
플러그인을 추가해주고
@Parcelize
data class User(
val name : String,
val age : Int
) : Parcelable
전달할 데이터클래스에
@Parcelize 어노테이션을 사용하면 Parcelable를 자동으로 만들어준다.
첫 번째 프래그먼트
// 세번째 화면으로 이동
submitButton.setOnClickListener {
val user = User(nameEditView.text.toString(),ageEditView.text.toString().toInt())
val action = OneFragmentDirections.actionOneFragmentToThreeFragment(user = user, name = "Han")
findNavController().navigate(action)
}
데이터클래스와 임의의 데이터가 전달되도록 하고
세 번째 프래그먼트
class ThreeFragment : Fragment(R.layout.fragment_three) {
private val args by navArgs<ThreeFragmentArgs>()
private var _binding : FragmentThreeBinding? = null
private val binding get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentThreeBinding.bind(view)
binding.apply {
nameText.text = args.user.name
ageText.text = args.user.age.toString()
Log.d("tst5", "${args.name}")
}
}
override fun onDestroy() {
super.onDestroy()
_binding = null
}
}