Workaround for ViewPager2 bug

master
Koitharu 2 years ago
parent b94f9e4b01
commit 79448bb01d
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -4,8 +4,10 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.AttrRes import androidx.annotation.AttrRes
import androidx.core.view.ancestors
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
class FastScrollRecyclerView @JvmOverloads constructor( class FastScrollRecyclerView @JvmOverloads constructor(
@ -15,6 +17,7 @@ class FastScrollRecyclerView @JvmOverloads constructor(
) : RecyclerView(context, attrs, defStyleAttr) { ) : RecyclerView(context, attrs, defStyleAttr) {
val fastScroller = FastScroller(context, attrs) val fastScroller = FastScroller(context, attrs)
private var applyViewPager2Fix = false
var isFastScrollerEnabled: Boolean = true var isFastScrollerEnabled: Boolean = true
set(value) { set(value) {
@ -43,10 +46,23 @@ class FastScrollRecyclerView @JvmOverloads constructor(
override fun onAttachedToWindow() { override fun onAttachedToWindow() {
super.onAttachedToWindow() super.onAttachedToWindow()
fastScroller.attachRecyclerView(this) fastScroller.attachRecyclerView(this)
applyViewPager2Fix = ancestors.any { it is ViewPager2 } == true
} }
override fun onDetachedFromWindow() { override fun onDetachedFromWindow() {
fastScroller.detachRecyclerView() fastScroller.detachRecyclerView()
super.onDetachedFromWindow() super.onDetachedFromWindow()
applyViewPager2Fix = false
}
override fun isLayoutRequested(): Boolean {
return if (applyViewPager2Fix) false else super.isLayoutRequested()
}
override fun requestLayout() {
super.requestLayout()
if (applyViewPager2Fix && parent?.isLayoutRequested == true) {
parent?.requestLayout()
}
} }
} }

@ -49,7 +49,7 @@ class FavouritesContainerFragment : BaseFragment<FragmentFavouritesContainerBind
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
val pagerAdapter = FavouritesContainerAdapter(this) val pagerAdapter = FavouritesContainerAdapter(this)
binding.pager.adapter = pagerAdapter binding.pager.adapter = pagerAdapter
binding.pager.offscreenPageLimit = 99 // FIXME binding.pager.offscreenPageLimit = 1
binding.pager.recyclerView?.isNestedScrollingEnabled = false binding.pager.recyclerView?.isNestedScrollingEnabled = false
TabLayoutMediator( TabLayoutMediator(
binding.tabs, binding.tabs,

Loading…
Cancel
Save