ViewPager2与SwipeRefreshLayout冲突导致条目无法点击问题

问题详细描述

ViewPager2的一个page子页中,有一个是SwipeRefreshLayhout包裹的RecyclerView。当RecyclerView滑动到最上面时,条目点击失效,但哪怕往下滑一点点,条目点击就没问题。可以进一步参考StackOverFlow上的描述

解决方式

将根布局的ConstraintLayout替换成了RelativeLayout后就好了。或者替换成其他布局也行,看到过有文章替换成LinearLayout也行的,我没有尝试。

啰嗦几句

解决这个问题过程中,也尝试过监听RecyclerView的滑动状态,当它滑动到最顶部位置时候,让它自动下滑一点点。也大体能解决问题。但还是上述的解决方式最好。

这个问题根本原因并没有找到,只知道与ViewPager2, SwipeRefreshLayout以及ConstrainLayout都有关系。如果看到这个问题的你种找到了原因,希望能在评论区与我共享。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ViewPager2中,点事件和滑动事件会同时触发。为了解决这个问题,你可以在item fragment中实现OnTouchListener接口,并在onTouch方法中判断是滑动事件还是点事件。如果是滑动事件,就返回false,让ViewPager2处理滑动事件;如果是点事件,就返回true,自己处理点事件。 以下是一个示例代码: ```java public class ItemFragment extends Fragment implements View.OnTouchListener { private float startX, startY; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_item, container, false); view.setOnTouchListener(this); return view; } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); startY = event.getY(); break; case MotionEvent.ACTION_UP: float endX = event.getX(); float endY = event.getY(); float distanceX = Math.abs(endX - startX); float distanceY = Math.abs(endY - startY); if (distanceX < 10 && distanceY < 10) { // 点事件 onItemClick(); return true; } break; } // 滑动事件 return false; } private void onItemClick() { // 处理点事件 } } ``` 在这个示例代码中,当用户手指按下时,记录下按下的位置。当手指抬起时,计算手指移动的距离,如果移动的距离很小,就认为是点事件,调用onItemClick方法处理点事件,并返回true。否则,就认为是滑动事件,返回false,让ViewPager2处理滑动事件。这样就可以避免点事件和滑动事件的冲突了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值