I used Viewpager and all worked properly with my app. When changed from Viewpager to Viewpager2 and I made changes inside in Viewpager2, the changes are not visible on the screen. I implement the Viewpager2 with FragmentStateAdapter but I don't find solution for to use the notifyDataSetChanged which makes the changes in ViewPager. What can I do for to solve my problem?
Adapter for ViewPager2
class ViewPagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
val mFragmentList: ArrayList<Fragment> = ArrayList<Fragment>()
val mFragmentSwitcher1 = ArrayList<Boolean>()
val mFragmentSwitcher2 = ArrayList<Boolean>()
val mFragmentSwitcher3 = ArrayList<Boolean>()
val mFragmentSwitcher4 = ArrayList<Boolean>()
override fun getItemCount(): Int {
//TODO("Not yet implemented")
return mFragmentList.size
}
override fun createFragment(position: Int): Fragment {
//TODO("Not yet implemented")
return FragmentChild.newInstance(position)
}
override fun onBindViewHolder(holder: FragmentViewHolder, position: Int, payloads: MutableList<Any>) {
super.onBindViewHolder(holder, position, payloads)
}
override fun getItemId(position: Int): Long {
return super.getItemId(position)
}
override fun containsItem(itemId: Long): Boolean {
return super.containsItem(itemId)
}
fun addFrag(
fragment: Fragment,
switcher1: Boolean, switcher2: Boolean, switcher3: Boolean, switcher4: Boolean) {
mFragmentList.add(fragment)
mFragmentSwitcher1.add(switcher1)
mFragmentSwitcher2.add(switcher2)
mFragmentSwitcher3.add(switcher3)
mFragmentSwitcher4.add(switcher4)
notifyDataSetChanged()
Log.d(TAG, mFragmentSwitcher1.toString())
Log.d(TAG, mFragmentSwitcher2.toString())
Log.d(TAG, mFragmentSwitcher3.toString())
Log.d(TAG, mFragmentSwitcher4.toString())
}
fun changeState(x :Boolean) {
for (i in 0 until mFragmentSwitcher1.size) {
mFragmentSwitcher1[i] = x
mFragmentSwitcher2[i] = x
mFragmentSwitcher3[i] = x
mFragmentSwitcher4[i] = x
Log.d(TAG, mFragmentSwitcher1.toString())
Log.d(TAG, mFragmentSwitcher2.toString())
Log.d(TAG, mFragmentSwitcher3.toString())
Log.d(TAG, mFragmentSwitcher4.toString())
}
notifyDataSetChanged()
}
}
Adapter for ViewPager
class ViewPagerAdapter(manager: FragmentManager?, var context: Context, viewPager: ViewPager,
tabLayout: TabLayout) : FragmentPagerAdapter(manager!!) {
val mFragmentList: ArrayList<Fragment> = ArrayList<Fragment>()
val mFragmentSwitcher1 = ArrayList<Boolean>()
val mFragmentSwitcher2 = ArrayList<Boolean>()
val mFragmentSwitcher3 = ArrayList<Boolean>()
val mFragmentSwitcher4 = ArrayList<Boolean>()
var viewPager: ViewPager
var tabLayout: TabLayout
override fun getItem(position: Int): Fragment {
return mFragmentList[position]
}
override fun getCount(): Int {
return mFragmentList.size
}
fun addFrag(fragment: Fragment,
switcher1: Boolean, switcher2: Boolean, switcher3: Boolean, switcher4: Boolean) {
mFragmentList.add(fragment)
mFragmentSwitcher1.add(switcher1)
mFragmentSwitcher2.add(switcher2)
mFragmentSwitcher3.add(switcher3)
mFragmentSwitcher4.add(switcher4)
Log.d(TAG, mFragmentSwitcher1.toString())
Log.d(TAG, mFragmentSwitcher2.toString())
Log.d(TAG, mFragmentSwitcher3.toString())
Log.d(TAG, mFragmentSwitcher4.toString())
}
fun changeState(x :Boolean) {
for (i in 0 until mFragmentSwitcher1.size) {
mFragmentSwitcher1[i] = x
mFragmentSwitcher2[i] = x
mFragmentSwitcher3[i] = x
mFragmentSwitcher4[i] = x
Log.d(TAG, mFragmentSwitcher1.toString())
Log.d(TAG, mFragmentSwitcher2.toString())
Log.d(TAG, mFragmentSwitcher3.toString())
Log.d(TAG, mFragmentSwitcher4.toString())
}
notifyDataSetChanged()
}
override fun getItemPosition(`object`: Any): Int {
return POSITION_NONE
}
init {
this.viewPager = viewPager
this.tabLayout = tabLayout
}
}