ViewPager2 and FragmentStatePagerAdapter

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

Upvotes: 0

Views: 3093

Answers (1)

Dr. Sa.M.
Dr. Sa.M.

Reputation: 2513

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

Upvotes: 2

Related Questions