RecyclerView的基本用法 (二)

20 篇文章 0 订阅

3 点击事件

ListView的Item项的点击事件项目中一般会用到两个,一个是OnClickListener,另一个是OnLongClickListener。

由于RView已经不支持这两个事件的回调,因此,我们需要从其他途径来监听单击和长按,这时就需要用到手势监听。首先我们需要写下面这个类:

private class RecyclerViewDemoOnGestureListener extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
      View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); //获取点击项的view
      int idx = recyclerView.getChildPosition(view);//获取点击项view在adapter的索引位置
      Log.e("onSingleTapConfirmed", "getChildPosition=" + idx);
      return super.onSingleTapConfirmed(e);
    }

    public void onLongPress(MotionEvent e) {
      View view = recyclerView.findChildViewUnder(e.getX(), e.getY());//获取点击项的view
      int idx = recyclerView.getChildPosition(view);//获取点击项view在adapter的索引位置
      Log.e("onLongPress", "getChildPosition=" + idx);
      super.onLongPress(e);
    }
  }

可以看到里面有两个回调方法,顾名思义,一个是单击,一个是长按,在里面我们可以通过RView的findChildViewUnder方法获取点击的对象视图,然后通过这个视图和RView的getChildPosition来获取该视图在整个列表里的位置,这个位置与adapter里的位置是对应的,由此,便可以通过这两个对象完成点击事件的其余操作。

但手势必须要通过View的OnTouchListener才能监听得到,毕竟手势这个类是用来帮助识别各种手势的,所以还需要给RView添加OnItemTouchListener事件。

        recyclerView.addOnItemTouchListener(this);

那么在其回调中我们需要做得事情就是将事件分流到手势监听里去并让事件继续往下传递。

@Override public boolean onInterceptTouchEvent(RecyclerView recyclerView,
      MotionEvent motionEvent) {
    gestureDetector.onTouchEvent(motionEvent);
    return false;
  }

  @Override public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
  }

最后,初始化手势监听必不可少:

    gestureDetector =
        new GestureDetectorCompat(this, new RecyclerViewDemoOnGestureListener());


由此,关于item的单击和长按问题便解决了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值