lcodecorex / TwinklingRefreshLayout

RefreshLayout that support for OverScroll and better than iOS. 支持下拉刷新和上拉加载的RefreshLayout,自带越界回弹效果,支持RecyclerView,AbsListView,ScrollView,WebView
Apache License 2.0
4k stars 672 forks source link

关于CollapsingToolbarLayout嵌套TwinklingRefreshLayout闪屏及TwinklingRefreshLayout嵌套viewpager问题解决办法 #135

Open tangjiarao opened 7 years ago

tangjiarao commented 7 years ago

我的xml结构是 -CoordinatorLayout --AppBarLayout ----VideoView //隐藏 ----SlidingTabLayout //不隐藏 --AppBarLayout --TwinklingRefreshLayout ----ViewPager --TwinklingRefreshLayout -CoordinatorLayout

viewPager下是fragment,fragment下是recycleView

按照作者提供的CollapsingToolbarLayout嵌套TwinklingRefreshLayout方法使用时,发现触摸屏幕缓慢向上移动会出现闪屏,不管是在viewPager下的fragment外嵌套TwinklingRefreshLayout还是在viewpager外嵌套TwinklingRefreshLayout。

是该方法导致 refreshLayout.setNestedScrollingEnabled(false); 这个方法应该是让TwinklingRefreshLayout跟随着CollapsingToolbarLayout移动。当设置为false时不再闪屏,但是触摸屏幕上下拖动无法再移动,或者移动不流畅。

我解决方法是 当recyclerView滑到顶部或底部时才能使用TwinklingRefreshLayout

步骤: 1.refreshLayout.setNestedScrollingEnabled(false);设置为false,setrefresh 及setLoadmore也设置为false,setOverScroll也设置为false,此时相当于TwinklingRefreshLayout不起作用 2.判断recyclerView的滑动状态及是否滑动到底部及顶部 当recyclerView向下滑,且滑动到底部时,setLoadmore方法设置true 当recyclerView在滑动时,执行步骤1操作 当recyclerView向上滑,且滑动到顶部时,setrefresh 方法设置为true

本人小白,提出一个自己的解决方法,希望能帮到其他人,如果有更好的请告诉我。

SjAndy88 commented 7 years ago

我也遇到这个问题,还好你这边给出了解决方法,也不知道这个库什么时候可以解决这个问题。

mendax92 commented 5 years ago

太棒了,解决了,不过滑动还是有点别扭

CarpOrange commented 2 years ago

我找到一个办法,可以对appBarLayout addOnOffsetChangedListener,offset为0表示到顶部了,启用refreshLayout,反之禁用。 https://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0616/3052.html appBarLayout.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener{ override fun onOffsetChanged(barLayout: AppBarLayout?, offset: Int) { if (offset == 0) { list?.forEach { (it as BaseClientPromotionLogFragment).enableRefreshLayout() } } else { list?.forEach { (it as BaseClientPromotionLogFragment).disableRefreshLayout() } } }

    })

public fun disableRefreshLayout() { refreshLayout.isNestedScrollingEnabled = false refreshLayout.setEnableRefresh(false) refreshLayout.setEnableOverScroll(false) }

public fun enableRefreshLayout() {
    refreshLayout.isNestedScrollingEnabled = true
    refreshLayout.setEnableRefresh(true)
    refreshLayout.setEnableOverScroll(true)
}