Closed jack-laowang closed 3 years ago
@MinchinWang 不好意思最近比较忙,由于support版本已经停止更新了所以不会再发布版本修复了,我复制了你的xml写了个demo验证。 你可以尝试复制下面代码修改, 首先开启不拦截横向滑动
mRefreshLayout.setDisableWhenAnotherDirectionMove(true);
配置后UltraViewPager
的位置应该可以滑动了,此时拖动AppBarLayout
部分无法触发Fling问题复制如下代码
public class SmoothRefreshLayout extends me.dkzwm.widget.srl.SmoothRefreshLayout {
public SmoothRefreshLayout(Context context) {
super(context);
}
public SmoothRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SmoothRefreshLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected boolean processDispatchTouchEvent(MotionEvent ev) {
final int action = ev.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_UP) {
if (mVelocityTracker != null) {
final int pointerId = ev.getPointerId(0);
mVelocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
float vy = mVelocityTracker.getYVelocity(pointerId);
float vx = mVelocityTracker.getXVelocity(pointerId);
if (Math.abs(vx) >= mMinimumFlingVelocity
|| Math.abs(vy) >= mMinimumFlingVelocity) {
boolean handler = onFling(vx, vy, false);
final View targetView = getScrollTargetView();
if (handler
&& !(mTargetView instanceof CoordinatorLayout)
&& targetView != null
&& !(targetView instanceof ViewPager)
&& !(targetView.getParent() instanceof View
&& targetView.getParent() instanceof ViewPager)) {
ev.setAction(MotionEvent.ACTION_CANCEL);
}
}
mVelocityTracker.recycle();
mVelocityTracker = null;
}
}
return super.processDispatchTouchEvent(ev);
}
}
我看了下布局即使不用SRL,在内容ViewPager上滑动也是无法上下滑动的,还是需要升级到androidx配合ViewPager2进行实现才能完全顺滑滑动
mRefreshLayout.setDisableWhenAnotherDirectionMove(true); 设置之后,会导致下面问题 1.拉到最后,上拉更多,无下一页,然后finish,返回到上个页面的刷新控件,不能下拉刷新 2,下拉刷新,然后finish当前页面, 上个页面的刷新控件不能加载更多 setDisableWhenAnotherDirectionMove这个属性导致的,去掉这个设置就不会了。所以是setDisableWhenAnotherDirectionMove(true)l
@MinchinWang Activity.finish()? 我有点懵逼
@MinchinWang 我建议你检查下代码,对象都不一样了SRL之间是不会互相影响的
mRefreshLayout.setDisableWhenAnotherDirectionMove(true); 你这个属性估计是全局的吧,A页面 跳B页面,B设置setDisableWhenAnotherDirectionMove(true); 然后上拉刷新,再返回A页面,A页面就不能加载更多了。只能下拉刷新
@MinchinWang 对象属性,不是全局的,不存在互相干扰的情况,这一点你看源码也能明白。
但确实出现了我上面说的问题 mRefreshLayout.setDisableWhenAnotherDirectionMove(true) 不设置这个属性就不会,可否看下这个方法是不是有问题?
你说的问题肯定和setDisableWhenAnotherDirectionMove
方法无关的,至于你说不设置不会出问题,是否是因为你设置后触摸正常操作触发了其它配置导致关闭了上个界面的上拉加载,无论从源代码分析还是Demo测试setDisableWhenAnotherDirectionMove
都仅仅只能影响到当前SRL对象的触摸处理逻辑。
布局如下
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/layout_root" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical">