android - 使用 ViewPager2 将方向更改为横向时显示两 block fragment

标签 android android-fragments android-viewpager2

我正在使用 ViewPager2WebView ,在纵向模式下它显示单页,但是当我切换到横向模式时它显示当前页面的一半和一半上一页。

我在 list 中有 android:configChanges="orientation|screenSize" 以避免破坏和重新创建 viewpager。

适配器

class ViewPageAdapter(
    private val tabs: ArrayList<Tab>, childFragmentManager: FragmentManager, lifecycle: Lifecycle
): FragmentStateAdapter(childFragmentManager, lifecycle) {
    override fun getItemCount(): Int = tabs.size

    override fun createFragment(position: Int): Fragment {
        return tabs[position].fragment
    }

    override fun containsItem(itemId: Long): Boolean {
        return tabs.map { it.tabId }.contains(itemId)
    }

    override fun getItemId(position: Int): Long {
        return tabs[position].tabId
    }

    fun removeItem(index: Int) {
        tabs.removeAt(index)
        notifyItemRemoved(index)
        notifyItemRangeChanged(index, tabs.size)
        notifyDataSetChanged()
    }
}

设置viewpager

adapter = ViewPageAdapter(browser.tabs, childFragmentManager, lifecycle)
binding.viewPager.adapter = adapter
binding.viewPager.offscreenPageLimit = 100
binding.viewPager.isUserInputEnabled = false

Portrait Mode Landscape Mode

最佳答案

这似乎是 ViewPager2 中的一个错误。 https://issuetracker.google.com/issues/175796502?pli=1

我使用以下解决方法暂时解决了该问题。当我有上一个页面时,就会出现这个问题,所以我所做的就是切换到上一个页面,然后再切换回当前页面,而不是平滑滚动,我希望他们尽快修复该错误。

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE || newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        val c = currentPageIndex
        binding.viewPager.setCurrentItem(if (currentPageIndex-1 > 0) currentPageIndex-1 else 0, false)
        binding.viewPager.setCurrentItem(c, false)
    }
}

关于android - 使用 ViewPager2 将方向更改为横向时显示两 block fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67895268/

相关文章:

android - 如何在 RxJava 流中间有条件地添加异步操作?

java - 如何为提示中的字符串设置颜色?

android - 在添加到 android.R.id.content 的 Fragment 中未调用 onStop

java - 在不使用任何资源 xml 的情况下将 View (按钮、标签等)添加到动态 fragment

android MapView + ViewPager2 + DataBinding 问题

java - 无法将 URL 设置为 SubsamplingScaleImageView URI

android - 在 Android 上创建和显示室内地图

android - 如何将数据从 fragment 发送到 Activity

android - TabLayoutMediator 不保留 TabItem 属性