使用 ViewPager2 将方向更改为横向显示两个片段
Two pieces of fragments are displayed on orientation change to landscape with ViewPager2
我正在使用 ViewPager2
和里面的 WebView
,在纵向模式下它显示单页,但是当我切换到横向模式时它显示当前页面的一半和上一页的一半.
我在清单中有 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
这似乎是 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)
}
}
我正在使用 ViewPager2
和里面的 WebView
,在纵向模式下它显示单页,但是当我切换到横向模式时它显示当前页面的一半和上一页的一半.
我在清单中有 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
这似乎是 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)
}
}