程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ViewPager2 selectCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ViewPager2 SELEctCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment?

开发过程中遇到ViewPager2 SELEctCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment的问题如何解决?下面主要结合日常开发的经验,给出你关于ViewPager2 SELEctCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment的解决方法建议,希望对你解决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 个和下一个选项卡开始的位 - 选择正确。

ViewPager2 selectCurrentItem - 选择 Tab,但在这个 tab 中放置了错误的 Fragment

解决方法

所以,决定就在这行代码中:

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,请注明来意。