Kotlin适配器声明问题:类型不匹配:推断的类型为MyTabAdapter,但为RecyclerView.Adapter<;(原始)RecyclerView.ViewHolder>;?预料之中
使用TabLayout和ViewPage2和fragment制作选项卡。 适配器上的类型不匹配。我是KOTLIN和Android的新手 如果有任何合适的教程链接,它实现了带viewpager2的tablayoutKotlin适配器声明问题:类型不匹配:推断的类型为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
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
}
}