0

I want to set the adapter of ViewPager2 to FragmentStatePagerAdapter but I get this error:

Type mismatch. Required: (RecyclerView.Adapter<RecyclerView.ViewHolder!>?..RecyclerView.Adapter<*>?) Found: ViewPager2Adapter

My ViewPagerAdapter class is

class ViewPager2Adapter(fm:FragmentManager) :FragmentStatePagerAdapter(fm) {

override fun getItem(position: Int): Fragment {
    return when(position) {
        0 -> {
            MyScansListFragment()
        }
        1 -> {
            PurchasedItemsFragment()
        }
        else -> {
            Fragment()
        }
    }
}

override fun getCount(): Int {
    return 2
}

override fun getItemPosition(`object`: Any): Int {
    return POSITION_NONE
}}

And in the oncreateView() :

val viewPager2Adapter = ViewPager2Adapter(activity?.supportFragmentManager!!)
    binding!!.viewPager.adapter = viewPager2Adapter

1 Answers1

2

okay, let's change the code a little bit. First of all, FragmentStatePagerAdapter has been deprecated.

FragmentStatePagerAdapter & FragmentPagerAdapter have been recently deprecated, and your code must look something like this. FragmentStatePagerAdapter and if you get your cursor over it and see details, there will be a statement "Deprecated Switch to androidx.viewpager2.widget.ViewPager2 and use androidx.viewpager2.adapter.FragmentStateAdapter instead."

try the following code.

class ViewPager2Adapter(private val listFragment: ArrayList<Fragment>,
                        fm: FragmentManager,
                        lifecycle: Lifecycle) : FragmentStateAdapter(fm, lifecycle) {


    override fun getItemCount(): Int {
        return listFragment.size
    }

    override fun createFragment(position: Int): Fragment {
       return listFragment[position]
    }
}

so, this is now kind of your universal viewpager adapter. The next thing is we require fragments to be passed in here.

//I don't think you need Fragment() but since it's there in your list.

val fragmentList = listOf(MyScansListFragment(),  PurchasedItemsFragment(),Fragment())
val viewPager2Adapter = ViewPager2Adapter(fragmentList, activity?.supportFragmentManager!!, lifecycle)
binding!!.viewPager.adapter = viewPager2Adapter

lets start coding
  • 1,839
  • 1
  • 10
  • 19
  • Thanks for the answer, but since my fragments doesn't update when data is changed I wanted to use FragmentStatePagerAdapter because of the answer in there https://stackoverflow.com/questions/30080045/fragmentpageradapter-notifydatasetchanged-not-working – Abdulsamet Kılınçarslan Jul 28 '21 at 12:24
  • so, that's an old question and FragmentStatePagerAdapter has been recently deprecated, even you must see your code look something like this. FragmentStatePagerAdapter and if you get your cursor over it and see details, there will be a statement " Deprecated Switch to androidx.viewpager2.widget.ViewPager2 and use androidx.viewpager2.adapter.FragmentStateAdapter instead." – lets start coding Jul 28 '21 at 12:34
  • even FragmentPagerAdapter has been deprecated for that as well android studio tells you to switch to FragmentStateAdapter. – lets start coding Jul 28 '21 at 12:35
  • @AbdulsametKılınçarslan if this answer helped you out don't forget to mark this answer as accepted and feel free to ask queries if you have any. – lets start coding Jul 28 '21 at 16:12