Android ViewPager with RecyclerView works incorrectly inside BottomSheet

后端 未结 7 1057
故里飘歌
故里飘歌 2020-12-13 02:51

When I try to scroll list, sometimes this works incorrect - BottomSheet intercepts the scroll event and hides.

How to reproduce this:

  1. Open Bottom Sheet
7条回答
  •  误落风尘
    2020-12-13 03:23

    This post saved my life: https://medium.com/@hanru.yeh/funny-solution-that-makes-bottomsheetdialog-support-viewpager-with-nestedscrollingchilds-bfdca72235c3

    Show my fix for ViewPager inside bottomsheet.

    package com.google.android.material.bottomsheet
    
    import android.view.View
    import androidx.annotation.VisibleForTesting
    import androidx.viewpager.widget.ViewPager
    import java.lang.ref.WeakReference
    
    
    class BottomSheetBehaviorFix : BottomSheetBehavior(), ViewPager.OnPageChangeListener {
    
        override fun onPageScrollStateChanged(state: Int) {}
    
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
    
        override fun onPageSelected(position: Int) {
            val container = viewRef?.get() ?: return
            nestedScrollingChildRef = WeakReference(findScrollingChild(container))
        }
    
        @VisibleForTesting
        override fun findScrollingChild(view: View): View? {
            return if (view is ViewPager) {
                view.focusedChild?.let { findScrollingChild(it) }
            } else {
                super.findScrollingChild(view)
            }
        }
    }
    

提交回复
热议问题