반응형
ViewPager2에서 adapter로 보이는 fragment를 갱신하고 싶을때가 생긴다
fragment -> activity는 워낙 기본 예제가 많으니 패스하고
아래와 같이 FragmentStateAdapter 내부에 onBindViewHolder에서 fragment 종류를 체크하고 reoad해주면 된다
FragmentStateAdapter(this) {
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> AAAFragment.newInstance("", "")
1 -> BBBFragment.newInstance("", "")
2 -> CCCFragment.newInstance(
XXX.toJson(
CCCData
)
)
else -> DDDDFragment.newInstance("", "")
}
}
override fun onBindViewHolder(
holder: FragmentViewHolder,
position: Int,
payloads: MutableList<Any>
) {
super.onBindViewHolder(holder, position, payloads)
//!!!!!
val fragment: PointFragment? = supportFragmentManager.findFragmentByTag("f$position") as CCCFragment?
fragment?.reload()
//!!!!!
}
override fun getItemCount(): Int {
return 4
}
}
CCCFragment 내부에 reoad를 만들어 원하는 함수를 호출한다
fun reload() {
loadData()
}
위의 세팅 후, 아래의 adapter에서 해당 함수를 호출한다
if(원하는 조건){
adapter?.notifyItemChanged(1)
}
반응형