首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin适配器声明问题:类型错配:推断类型为MyTabAdapter但RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!>?预期

Kotlin适配器声明问题:类型错配:推断类型为MyTabAdapter但RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!>?预期
EN

Stack Overflow用户
提问于 2020-12-08 03:21:13
回答 1查看 1.1K关注 0票数 1

使用TabLayout、ViewPager2和片段制作选项卡。我得到了类型错配的适配器。我是刚接触过KOTLIN和Android的,如果有合适的教程链接,可以用viewpager2实现选项卡布局。

代码语言:javascript
运行
复制
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混淆了,因为它显示出了不推荐的方法,如果有任何简单的方法可以实现,那么我也可以尝试。

代码语言:javascript
运行
复制
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
}

}

代码语言:javascript
运行
复制
**Here is one of the fragment . I have three fragment in total.** I 

class PersonalFragment : Fragment() {
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_personal, container, false)
}

}

代码语言:javascript
运行
复制
 I have referred the https://www.javatpoint.com/kotlin-android-tablayout-with-viewpager for implementation

EN

回答 1

Stack Overflow用户

发布于 2020-12-08 07:40:19

我可以看到两个问题:

  1. 您所跟踪的文章使用了ViewPager,但是您所附加的代码片段显示您使用的是ViewPager2
  2. MyTabAdapter没有扩展任何东西,它必须扩展某种基本适配器。

在您的例子中,我想您希望使用ViewPager2来浏览一些片段。您需要使用FragmentStateAdapter

修改MyTabAdapter使其受欢迎

代码语言:javascript
运行
复制
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的详细文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65192619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档