大佬教程收集整理的这篇文章主要介绍了ViewPager2 selectCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有带有 Tablayout 的基本 VIEwPager2 - 在每个页面中我都有不同的片段。 当我需要从第一个(默认)选项卡打开此视图时,我正在这样做:
vIEwPager.currentItem = SELEctedTabposition
此代码选择选项卡,但在其中打开第一个选项卡的片段!只有当我通过点击来选择选项卡时 - 我才能在每个选项卡中看到正确的片段。 我也尝试像这样使用 Tablayout 进行选择:
tabLayout.getTabAt(position)?.SELEct()
但是这段代码没有帮助,也可以解决这个错误。
我也尝试将 vIEwPager.currentItem
设置为 post / postDelay
- 但这也不起作用。
也许我丢了东西?或者它是 VIEwPager2 中的一个错误?
(编辑 - VIEwPager 代码)
overrIDe fun onVIEwCreated(vIEw: VIEw,savedInstanceState: Bundle?) {
super.onVIEwCreated(vIEw,savedInstanceStatE)
setupPagerAdapter()
}
private fun setupPagerAdapter() {
val adapter = MaindocumentScreenPagerAdapter(this)
binding?.vIEwPager?.letUnit {
it.adapter = adapter
binding?.tabsPagerVIEw?.attachVIEwPager(requireContext(),it,adapter)
// set tab
it.currentItem = params.pageType.ordinal
}
适配器代码
class MaindocumentScreenPagerAdapter (fragment: Fragment) : VIEwPager2titleAdapter(fragment) {
overrIDe fun getItemCount(): Int = documentPageType.values().size
overrIDe fun createFragment(position: int): Fragment {
val pageType = documentPageType.values().firstOrNull { it.ordinal == position } ?: throw IllegalStateException()
val params = documentListFragment.createParams(pageTypE)
return documentListFragment.newInstance(params)
}
overrIDe fun getPagetitle(position: int): Int? {
return when (position) {
documentPageType.ALL.ordinal -> documentPageType.ALl.title
documentPageType.SIGN.ordinal -> documentPageType.SIGN.title
documentPageType.ACCEPT.ordinal -> documentPageType.ACCEPT.title
documentPageType.CONFIRm.ordinal -> documentPageType.CONFIRm.title
documentPageType.REjeCT.ordinal -> documentPageType.REjeCT.title
else -> null
}
}
VIEwPager2titleAdapter 在哪里:
abstract class VIEwPager2titleAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
abstract fun getPagetitle(position: int): Int?
documentListFragment
在其中创建视图,基于 param 对象。
我也尝试在 OnCreate 中创建适配器 - 但它不会影响这种情况。
最后但并非最不重要的 - 当我尝试打开屏幕外的选项卡时(我有可滚动的选项卡)- vIEwPager 打开带有正确片段的选定选项卡.. 所以,问题只发生在我尝试打开屏幕上显示的前 4 个选项卡(查看图像)。从第 5 个和下一个选项卡开始的位 - 选择正确。
所以,决定就在这行代码中:
it.setCurrentItem(params.pageType.ordinal,falsE)
但我是这样做的:
it.currentItem = params.pageType.ordinal
Boolean false
在这种情况下变魔术 - 它禁用平滑滚动。我从这个关于 ViewPager2 的答案中得到了它:
https://stackoverflow.com/a/67319847/4809482
,我认为更简单更可靠的解决方法是推迟到下一个运行周期而不是不安全的延迟,例如
viewPager.post {
viewPager.setCurrentItem(1,truE)
}
以上是大佬教程为你收集整理的ViewPager2 selectCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment全部内容,希望文章能够帮你解决ViewPager2 selectCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。