[Android/Kotlin] Fragment -> 액티비티 Data 전달

정민수·2024년 1월 30일

Fragment -> Activity

프래그먼트에서 액티비티로의 데이터 전달.
처음엔 Fragment에서 인터페이스를 생성하고 DetailActivity에서 바로 인터페이스를 상속 받았는데
로그캣에서 이런 오류가 발생하였다.

RuntimeException MainActivity~~~

이건 프래그먼트에서 onAttach로 액티비티에서 프래그먼트리스너(인터페이스)가 없으면 throw로 나타나게 하였는데 분명 디테일 액티비티에상속을 시켰는데도 계속 이런 오류가 발생하였다.
찾아보니 메인액티비티에 인터페이스가 상속되지 않아서 발생한 오류라고 하였다.

그래서 데이터의 전달을
Fragment -> MainActivity -> DetailActivity로 진행하였다.

Interface생성

interface FragmentDataListener {
    fun onDataReceived(data: Bundle)
}

Fragment

리스너 전역 변수

private var listener : FragmentDataListener? = null

onAttach

override fun onAttach(context: Context) {
        super.onAttach(context)

        if (context is FragmentDataListener) {
            listener = context
        } else {
            throw RuntimeException("$context must implement FragmentDataListener")
        }
    }

onViewCreated

val musicalAdapter = MusicalAdapter(dataList)

        musicalAdapter.itemClick = object : MusicalAdapter.ItemClick {
            override fun onClick(view : View, position: Int) {
                val clickedItem =dataList[position]
                val data = Bundle().apply{
                    putParcelable("musicalItem", clickedItem)
                }

                listener?.onDataReceived(data)

            }
        }

데이터리스트의 항목을 선택하면 그 포지션의 데이터들을 번들에 담아준다.

MainActivity

interface상속 받아주기.

onDataReceived

override fun onDataReceived(data: Bundle) {
        val intent = Intent(this, DetailActivity::class.java)
        intent.putExtra("musicalItem", data.getParcelable<Parcelable>("musicalItem"))
        startActivity(intent)
    }

DetailActivity

val musicalItem = intent.getParcelableExtra<Musical>("musicalItem")

        binding.DetailIv.setImageResource(musicalItem?.musicalImage ?: 0)
        binding.DetailTopName.text = musicalItem?.musicalName
        binding.DetailLocation.text = musicalItem?.musicalLocation
        binding.DetailName.text = musicalItem?.musicalName
        binding.detailDate.text = musicalItem?.musicalDate

받아서 사용

profile
응애...아무것도 모르는 개발자 흉내라도 내고 싶은 비전공자입니다.

0개의 댓글