본문 바로가기

카테고리 없음

안드로이드 ViewPager2 FragmentStateAdapter의 fragment 갱신하고 싶을 때

반응형

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)
}
반응형