使用TabLayout、ViewPager2和片段制作选项卡。我得到了类型错配的适配器。我是刚接触过KOTLIN和Android的,如果有合适的教程链接,可以用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
}}
**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)
}}
I have referred the https://www.javatpoint.com/kotlin-android-tablayout-with-viewpager for implementation我
发布于 2020-12-08 07:40:19
我可以看到两个问题:
ViewPager,但是您所附加的代码片段显示您使用的是ViewPager2。MyTabAdapter没有扩展任何东西,它必须扩展某种基本适配器。在您的例子中,我想您希望使用ViewPager2来浏览一些片段。您需要使用FragmentStateAdapter。
修改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的详细文档
https://stackoverflow.com/questions/65192619
复制相似问题