Kotlin适配器声明问题:类型不匹配:推断的类型为MyTabAdapter,但为RecyclerView.Adapter<;(原始)RecyclerView.ViewHolder>;?预料之中

Kotlin适配器声明问题:类型不匹配:推断的类型为MyTabAdapter,但为RecyclerView.Adapter<;(原始)RecyclerView.ViewHolder>;?预料之中,kotlin,android-recyclerview,adapter,Kotlin,Android Recyclerview,Adapter,使用TabLayout和ViewPage2和fragment制作选项卡。 适配器上的类型不匹配。我是KOTLIN和Android的新手 如果有任何合适的教程链接,它实现了带viewpager2的tablayout class ProfileActivity:AppCompatActivity() { lateinit var toolbar: Toolbar lateinit var tabLayout: TabLayout lateinit var viewpager2: ViewPager2

使用TabLayout和ViewPage2和fragment制作选项卡。 适配器上的类型不匹配。我是KOTLIN和Android的新手 如果有任何合适的教程链接,它实现了带viewpager2的tablayout

class ProfileActivity:AppCompatActivity() {
lateinit var toolbar: Toolbar
lateinit var tabLayout: TabLayout
lateinit var viewpager2: ViewPager2

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_profile)

    // Toolbar

    toolbar=findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)
    supportActionBar?.apply {
        title="Profile"

        // show back button on toolbar
        // on back button press, it will navigate to parent activity
        // mentioned in AndroidManifest.xml
        setDisplayHomeAsUpEnabled(true)
        setDisplayShowHomeEnabled(true)
    }

    // Tab layout - add tab items
    tabLayout=findViewById(R.id.profileTabLayout)
    tabLayout.addTab(tabLayout.newTab().setText("Personal"))
    tabLayout.addTab(tabLayout.newTab().setText("Education"))
    tabLayout.addTab(tabLayout.newTab().setText("Interests"))
    tabLayout.tabGravity=TabLayout.GRAVITY_FILL

    //Viewpager2
    viewpager2=findViewById(R.id.profileViewPager)

    //Adapter for view pager
    val adapter1=MyTabAdapter(this,supportFragmentManager,tabLayout.tabCount)

    viewpager2.adapter= adapter1

    viewpager2.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabLayout))

    tabLayout.addOnTabSelectedListener(
        object : TabLayout.OnTabSelectedListener {

        override fun onTabSelected(tab: TabLayout.Tab) {
            viewpager2.currentItem = tab.position
        }
        override fun onTabUnselected(tab: TabLayout.Tab) {

        }
        override fun onTabReselected(tab: TabLayout.Tab) {

        }
    }
    )
}
}

以下是MyAdapter的代码 可能我对FragmentStatePagerAdapter感到困惑,因为它显示已弃用。如果有任何简单的方法可以实现,那么我也可以试试。

class MyTabAdapter(profileActivity: ProfileActivity, supportFragmentManager: FragmentManager, private var tabCount: Int) {


fun getItem(position: Int): Fragment? {

    when (position) {
        0 -> {
           // val homeFragment: HomeFragment = HomeFragment()
           // val personalFragment:PersonalFragment=PersonalFragment()
            return PersonalFragment()
        }
        1 -> {
            return EducationFragment()
        }
        2 -> {
            // val movieFragment = MovieFragment()
            return InterestsFragment()
        }
        else -> return null
    }

}
fun getCount(): Int {
    return tabCount
}
}

}


我可以看到两个问题:

  • 您关注的文章使用了
    ViewPager
    ,但您附加的代码片段表明您使用的是
    ViewPager2
  • MyTabAdapter
    不扩展任何内容,它必须扩展某种基本适配器
  • 在您的例子中,我想您希望使用
    ViewPager2
    浏览一些片段。你需要使用

    修改MyTabAdapter

    class MyTabAdapter(profileActivity: ProfileActivity, private val tabCount: Int) : FragmentStateAdapter(profileActivity) {
    
        override fun createFragment(position: Int): Fragment? {
    
            when (position) {
                0 -> {
                    // val homeFragment: HomeFragment = HomeFragment()
                    // val personalFragment:PersonalFragment=PersonalFragment()
                    return PersonalFragment()
                }
                1 -> {
                    return EducationFragment()
                }
                2 -> {
                    // val movieFragment = MovieFragment()
                    return InterestsFragment()
                }
                else -> return null
            }
    
        }
        
        override fun getItemCount(): Int {
            return tabCount
        }
    }
    

    查看从
    ViewPager
    迁移到
    ViewPager2

    的详细文档我可以看到两个问题:

  • 您关注的文章使用了
    ViewPager
    ,但您附加的代码片段表明您使用的是
    ViewPager2
  • MyTabAdapter
    不扩展任何内容,它必须扩展某种基本适配器
  • 在您的例子中,我想您希望使用
    ViewPager2
    浏览一些片段。你需要使用

    修改MyTabAdapter

    class MyTabAdapter(profileActivity: ProfileActivity, private val tabCount: Int) : FragmentStateAdapter(profileActivity) {
    
        override fun createFragment(position: Int): Fragment? {
    
            when (position) {
                0 -> {
                    // val homeFragment: HomeFragment = HomeFragment()
                    // val personalFragment:PersonalFragment=PersonalFragment()
                    return PersonalFragment()
                }
                1 -> {
                    return EducationFragment()
                }
                2 -> {
                    // val movieFragment = MovieFragment()
                    return InterestsFragment()
                }
                else -> return null
            }
    
        }
        
        override fun getItemCount(): Int {
            return tabCount
        }
    }
    

    检查从
    ViewPager
    迁移到
    ViewPager2

    的详细文档,请附上
    MyTabAdapter
    的源代码请附上
    MyTabAdapter
    class MyTabAdapter(profileActivity: ProfileActivity, private val tabCount: Int) : FragmentStateAdapter(profileActivity) {
    
        override fun createFragment(position: Int): Fragment? {
    
            when (position) {
                0 -> {
                    // val homeFragment: HomeFragment = HomeFragment()
                    // val personalFragment:PersonalFragment=PersonalFragment()
                    return PersonalFragment()
                }
                1 -> {
                    return EducationFragment()
                }
                2 -> {
                    // val movieFragment = MovieFragment()
                    return InterestsFragment()
                }
                else -> return null
            }
    
        }
        
        override fun getItemCount(): Int {
            return tabCount
        }
    }