我有基本的 ViewPager2 和 Tablayout - 在每个页面中我都有不同的片段。
当我需要不从第一个(默认)选项卡打开此视图时,我正在这样做:
viewPager.currentItem = selectedTabPosition
此代码选择选项卡,但在其中打开第一个选项卡的片段!仅当我通过点击来选择选项卡时 - 我才能在每个选项卡中看到正确的片段。
我也尝试使用 Tablayout 进行选择,如下所示:
tabLayout.getTabAt(position)?.select()
但这段代码没有帮助,也可以解决这个错误。
我也尝试过设置viewPager.currentItem
with 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
在其中根据参数对象创建视图。
我还尝试在 OnCreate 内创建适配器 - 但它不会影响这种情况。
最后但并非最不重要的 - 当我尝试打开屏幕外的选项卡(我有可滚动选项卡)时 - viewPager 打开带有正确片段的选定选项卡。所以,只有当我尝试打开屏幕上显示的前 4 个选项卡(查看图像)。从第 5 个和下一个选项卡开始的位 - 已选择正确。
![enter image description here](https://i.stack.imgur.com/DHaEG.png)