마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Kotlin fragment 간 데이터 전달

0 추천

안녕하세요 fragment 간 데이터 전달이 안돼서 질문남깁니다.

fragmentA <-> fragmentB 인 상황이고

fragmentA의 recyclerView item을 클릭했을 시, fragmentB가 뜰 수 있도록 구현하고자 하였습니다.

fragmentA in Adapter

holder.container.setOnClickListener {
    val manager: FragmentManager = (context as AppCompatActivity).supportFragmentManager
    val ft: FragmentTransaction = manager.beginTransaction()

    ft.add(R.id.fg_MainContainer, DetailPostFragment.newInstance(item.id), "fm_Post")
    ft.commitAllowingStateLoss()
}

 

fragmentB

class DetailPostFragment : BaseFragment<DetailPostViewModel, FragmentDetailpostBinding>(),MainActivity.onBackPressedListener{
    companion object {
        fun newInstance(postId: Long) : DetailPostFragment {
            val bundle = Bundle()
            bundle.putLong("postId", postId)
            val detailPostFragment = DetailPostFragment()
            detailPostFragment.arguments = bundle
            return detailPostFragment
        }
    }
    ...
}

 

이렇게 구현을 한 후,

val postId = arguments?.getLong("postId")
Log.e("postId", "$postId")

로그를 통해 확인해 보니 null 값만 들어가더라구요

제가 혹시 잘못 사용하고 있는 것 일까요? 도움주시면 감사하겠습니다.

hand (1,070 포인트) 님이 11월 18일 질문

1개의 답변

0 추천
 
채택된 답변

ft.add(R.id.fg_MainContainer, DetailPostFragment.newInstance(item.id), "fm_Post")

위의 코드에 브레이크 포인트를 걸고 item.id가 어떤 값이 들어가는지 확인해 보세요.  item 이 널일 가능성이 있어 보이네요.

어쨌든, 해결방법은 중간 중간 브레이크 포인트를 걸고 어디서 값이 누락되는지 확인하시면 될 것 같습니다.

spark (172,410 포인트) 님이 11월 18일 답변
hand님이 11월 18일 채택됨
안녕하세요 spark 님 답변 감사합니다.

확인해보니 container에도 setOnClickListener()를 해주고 있고, container 안의 view에도 setOnClickListener()를 해주고 있었네요... container를 클릭했을 때만 bundle을 넣어주고, container 안의 view에는 이러한 처리를 해주지 않아 발생한 문제였습니다..

도움주셔서 감사합니다!!
...