프래그먼트 데이터 전달-인터페이스

littlecsh·2024년 2월 5일

앱개발

목록 보기
14/16
post-thumbnail

번들에 담아 데이터를 주고 받는 글을 작성한 적이 있다.

오늘은 조금은 더 간편한? 방법으로 데이터를 주고 받아보려고 한다.

바로 인터페이스를 이용하는 방법이다.

사실 엄밀히 말하면 데이터를 주고 받는것이 아니라 데이터를 공유할 공간을 만드는 것이다. 그러기 위해 인터페이스를 사용하는것.

interface DataListener{
	fun getData(param:String)
}
class Fragment : Fragment() {
	var listener: FragmentDataListener? = null

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

        if (context is FragmentDataListener) {
            listener = context
        } else {
            throw RuntimeException("$context must implement FragmentDataListener")
        }
    }
    
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentImageListBinding.inflate(inflater, container, false)
        return binding.root
    }
}
class MainActivity : AppCompatActivity(), DataListener{
	var data: String? = null

	override fun getData(param:String){
    	data=param
    }
}

위 코드는 Fragment에서 활용한 데이터를 MainActivity에서도 활용하기 위한 방법이다.

Fragment의 onAttach메서드는 프래그먼트가 액티비티에 붙을때 자동으로 호출되는 메서드로 혹시모를 오류를 위해 추가해주었다.

프래그먼트가 액티비티에 잘 붙었다면 listener에 context를 할당하고, 이를 통해 Fragment와 MainActivity가 서로 데이터를 오갈 수 있다.

profile
앱개발 튜토리얼

0개의 댓글