본문 바로가기

[UMC/Android] 3주차 - Activity/Fragment간 데이터 전달

@hyeon.s2022. 10. 12. 23:26

3주차 -  Activity/Fragment간 데이터 전달

 

배운 점

  • Fragment 간 Data를 주고 받을 때 FragmentManager에 Bundle로 data를 담아 전달하는 방법만 알고 있었는데, Fragment Result API에 대해 새롭게 알게 되었다.
    • 일회성 데이터를 Fragment간 또는 Fragment와 host Activity간 전달하고 싶을 때 사용한다.
    • 사용하기 위해 implementation "androidx.fragment:fragment-ktx:1.3.0" 의존성 추가해야한다.
    • Fragment 간 data 전달
      • Fragment2에서 Fragment1 로 데이터를 전달하는 예시
      • Fragment1에 result Listener를 설정, Fragmetn1 FragmentManager에서 setFratmentResultListene() 호출한다.
      • Fragment2에 setFragmentResult() API를 이용해 FragmentManager에 같은 requestKey로 result값을 set한다.
    • HostActivity에서 data 받기
      • supportFragmentManager 를 get해서 받아와 setFragmentResultListener를 설정해 값을 받아온다.
      • 아래 코드는 해당 리스너 부분이다.
supportFragmentManager
                .setFragmentResultListener("requestKey", this) { requestKey, bundle ->
            val result = bundle.getString("bundleKey") }

🔥 트러블슈팅

JAVA.LANG.CLASSCASTEXCEPTION 발생

val value = etValue.text.toString()
                setFragmentResult("requestKey", bundleOf("bundleKey" to value))

원인

  • value부분을 etValue.text로 설정 후 받는쪽 Activity에서 String으로 받아 JAVA.LANG.CLASSCASTEXCEPTION 이 발생하였다.

해결

  • .toString() 을 이용해 String 자료형으로 바꾸니 해결되었다.
hyeon.s
@hyeon.s :: 개발로그
목차