android 蓝牙长按,Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类...



Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

我写的附录文章2,介绍了Android如何基于OnItemTouchListener +GestureDetector实现单击、长按事件的监听,由于如今RecyclerView在Android开发是如此的普遍,以及RecyclerView的单击事件是如此的常用,如果像附录文章2那样把一堆事件监听写到业务逻辑代码里面,那得写多少遍重复代码!所以我把给RecyclerView添加点击事件的Listener抽取、封装成一个常用的工具栏类RecyclerViewUtil。

在给一个RecyclerView添加单击事件时候,跟ListView的监听事件一样,只需要简单的写如下代码即可完成:

//第一步,先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context

RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);

//第二步,直接set

util.setOnItemClickListener(new RecyclerViewUtil.OnItemClickListener() {

@Override

public void onItemClick(int position, View view) {

//Toast.makeText(getApplicationContext(),position+" 单击",Toast.LENGTH_SHORT).show();

}

});

长按事件也类似:

//先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context

RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView);

util.setOnItemLongClickListener(new RecyclerViewUtil.OnItemLongClickListener() {

@Override

public void onItemLongClick(int position, View view) {

//Toast.makeText(getApplicationContext(),position+" 长按",Toast.LENGTH_SHORT).show();

}

});

封装、抽取好的通用RecyclerViewUtil.java全部代码:

package zhangphil.app;

import android.content.Context;

import android.support.v7.widget.RecyclerView;

import android.view.GestureDetector;

import android.view.MotionEvent;

import android.view.View;

/**

* Created by Phil on 2016/11/19.

*/

public class RecyclerViewUtil {

private RecyclerView mRecyclerView = null;

private GestureDetector mGestureDetector = null;

private RecyclerView.SimpleOnItemTouchListener mSimpleOnItemTouchListener;

private OnItemClickListener mOnItemClickListener = null;

private OnItemLongClickListener mOnItemLongClickListener = null;

private Context context;

public RecyclerViewUtil(Context context, RecyclerView recyclerView) {

this.context = context;

this.mRecyclerView = recyclerView;

mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {

//长按事件

@Override

public void onLongPress(MotionEvent e) {

super.onLongPress(e);

if (mOnItemLongClickListener != null) {

View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());

if (childView != null) {

int position = mRecyclerView.getChildLayoutPosition(childView);

mOnItemLongClickListener.onItemLongClick(position, childView);

}

}

}

//单击事件

@Override

public boolean onSingleTapUp(MotionEvent e) {

if (mOnItemClickListener != null) {

View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());

if (childView != null) {

int position = mRecyclerView.getChildLayoutPosition(childView);

mOnItemClickListener.onItemClick(position, childView);

return true;

}

}

return super.onSingleTapUp(e);

}

});

mSimpleOnItemTouchListener = new RecyclerView.SimpleOnItemTouchListener() {

@Override

public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

if (mGestureDetector.onTouchEvent(e)) {

return true;

}

return false;

}

};

mRecyclerView.addOnItemTouchListener(mSimpleOnItemTouchListener);

}

public void setOnItemClickListener(OnItemClickListener l) {

mOnItemClickListener = l;

}

public void setOnItemLongClickListener(OnItemLongClickListener l) {

mOnItemLongClickListener = l;

}

//长按事件接口

public interface OnItemLongClickListener {

public void onItemLongClick(int position, View view);

}

//单击事件接口

public interface OnItemClickListener {

public void onItemClick(int position, View view);

}

}

使用时候直接把RecyclerViewUtil.java复制到自己的项目代码工程中即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值