번들에 담아 데이터를 주고 받는 글을 작성한 적이 있다.
오늘은 조금은 더 간편한? 방법으로 데이터를 주고 받아보려고 한다.
바로 인터페이스를 이용하는 방법이다.
사실 엄밀히 말하면 데이터를 주고 받는것이 아니라 데이터를 공유할 공간을 만드는 것이다. 그러기 위해 인터페이스를 사용하는것.
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가 서로 데이터를 오갈 수 있다.