【发布时间】:2021-07-21 18:52:46
【问题描述】:
我有带有 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的代码的正确方法
-
@Andrew 我添加了代码
-
仍然需要适配器设置,即
MainDocumentScreenPagerAdapter中的内容 -
@Andrew 完成了????
标签: android android-fragments android-viewpager android-tablayout android-viewpager2