SmartRefreshLayout与AndroidX组件新版本存在兼容性问题

ni65a41a  于 2个月前  发布在  Android
关注(0)|答案(2)|浏览(37)

新项目(基于AndroidX,依赖版本普遍比较新)需要实现类似SmartRefreshLayout嵌套CoordinatorLayout嵌套RecyclerView的效果,我直接参考了 NestedScrollExampleFragmentIntegral 这个页面的实现,发现手指放在RecyclerView上时,没法一步到位触发下拉刷新和上拉加载更多,需要先把列表拉到顶部,松开手指后再下拉,才能触发刷新。
折腾了一天,没找出哪里有问题,demo那里还套了层ViewPager,我这只有个RecyclerView,不应该啊。

最后瞄了下SmartRefreshLayout里面gradle的配置,嗯?好像没看到AndroidX,还用的support包,怀疑有没有可能是依赖的问题,于是把SmartRefreshLayout升级到AndroidX。

没升级AndroidX前,部分依赖是这样的:

implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

自动升级AndroidX后,部分依赖的版本还是比较老的,如下:

implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

解决gradle某些异常后,运行,没问题,跟原demo一样,能正常一步到位触发下拉。
后面升级依赖:

implementation 'com.google.android.material:material:1.4.0' // 实际上升级到1.1.0就出问题了
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'

运行后,出现了跟我那个项目一样的情况,得拉倒顶部松开再拉一次才能触发刷新,如图:

后面把部分依赖改回刚升级AndroidX时候的版本:

implementation 'com.google.android.material:material:1.0.0' // 改回1.0.0
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'

竟然正常了,如图:

基本可以确认SmartRefreshLayout与AndroidX某些组件存在兼容性问题,希望能出一个基于AndroidX的修复版本。

x33g5p2x

x33g5p2x1#

测试了一下,强制使用 recyclerview 1.0.0版本,才能一步到位触发下拉,改成1.1.0都不行

configurations.all {
        resolutionStrategy.force 'androidx.recyclerview:recyclerview:1.0.0'
    }
3z6pesqy

3z6pesqy2#

发现新的问题,SmartRefreshLayout嵌套CoordinatorLayout的时候,上拉加载会很诡异。

图上的界面布局层次是这样的:

SmartRefreshLayout
	CoordinatorLayout
		FrameLayout
			RecyclerView

具体现象描述大概是:
1.当手指按住滑动到列表底部时,继续上拉,不出现footer,需要松开手指再滑动,才会出现footer;
2.当惯性滑动(fling)列表到底部时,在短时间内按下手指往上滑动(多次重复松开再滑),无法拉出footer,需要松开手指完全停止操作,等待大概1秒,然后往上滑动列表,才能拉出来footer。

相关问题