Android RecyclerView点击事件与长按事件

原文链接如下:RecyclerView onClick

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    public interface OnItemClickListener {
        void onItemClick(View view, int position);

        void onItemLongClick(View view, int position);
    }

    private OnItemClickListener mListener;

    private GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
        mListener = listener;

        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());

                if (childView != null && mListener != null) {
                    mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView));
                }
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());

        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }

        return false;
    }

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

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    }
}

使用:

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), recyclerView, new RecyclerItemClickListener.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        // ...
    }

    @Override
    public void onItemLongClick(View view, int position) {
        // ...
    }
}));

代码:https://github.com/jdsjlzx/SuperRecyclerView

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: RecyclerViewAndroid 中一种高性能的列表组件,它可以用来显示列表数据。它是 ListView 的替代品,具有更好的性能和更灵活的布局控制。与 ListView 不同,RecyclerView 没有提供默认的布局样式,需要开发者自己定义布局和适配器。它支持横向和纵向滑动,还提供了强大的点击事件处理。 ### 回答2: Android中的RecyclerView是一个强大且灵活的控件,用于在Android应用中显示复杂的列表和网格数据。与ListView和GridView相比,RecyclerView具有更好的性能和灵活性,允许您更轻松地实现自定义布局和动画效果。 RecyclerView具有以下几个主要组件: 1. RecyclerView.Adapter:负责为RecyclerView提供数据并管理数据的更新。 2. RecyclerView.LayoutManager:控制RecyclerView中项目的布局,例如线性布局、网格布局等。 3. RecyclerView.ViewHolder:保存每个项目的视图和数据。 在将RecyclerView添加到您的应用程序中之前,您需要先创建一个适配器,其中应该包含适配器需要的数据和每个项目的视图。然后,您可以创建一个LayoutManager来决定RecyclerView中项目的布局方式。最后,在布局文件中添加RecyclerView元素并将其连接到LayoutManager和Adapter即可。您还可以实现RecyclerView.ItemDecoration、RecyclerView.ItemAnimator和RecyclerView.OnItemTouchListener等接口来实现各种自定义功能。 这里有一些使用RecyclerView的优点: 1. RecyclerView比ListView和GridView更高效:它避免了ListView中的findViewById()和getItem()方法的重复调用,从而大大提高了性能。 2. RecyclerView具有良好的动画效果:由于RecyclerView良好的架构,可以很容易地实现多种动画效果。 3. RecyclerView允许多种布局:相对于ListView和GridView,RecyclerView允许您更轻松地实现不同的布局方式。 总之,RecyclerView是一个非常强大且灵活的控件,可以帮助您创建自定义的列表和网格布局。它拥有高性能、良好的动画效果和多种布局方式,是一个开发高质量Android应用的重要组件。 ### 回答3: Android RecyclerView 是一个强大的视图组件,在可滚动的列表视图中扮演着重要的角色。它可以显示大量的数据,并且可以按需加载,还可以实现自定义布局,适配器,并支持动画和拖放等功能。 相较于 ListView,RecyclerView 更加灵活和高效。它采用 ViewHolder 模式来重用已经实例化的视图,从而避免了在列表中反复创建和销毁视图的过程。此外,RecyclerView 支持水平和垂直两种布局方向,可以自由定制滑动效果,支持增量更新和局部刷新等优点。 在使用 RecyclerView 的过程中,需要自定义适配器和布局管理器。其中,适配器用于控制列表项的展示,包括数据源的处理和视图的创建,可以在 Adapter 中进行数据的增删改查等操作;布局管理器用于控制 RecyclerView 具体的排版方向和样式。此外,还可以通过添加 ItemDecoration、AddOnScrollListener 等来实现更加复杂的效果,例如分割线、瀑布流等。 在性能优化方面,RecyclerView 支持局部刷新,它可以避免对整个列表的更新,而只更新有变化的元素,大大提高了列表的渲染速度。此外,RecyclerView 提供了多种动画效果,例如添加、删除、移动元素时的过渡动画,可以让界面更加生动。 总的来说,RecyclerViewAndroid 中一个十分重要的组件,它的灵活性和高效性能使得我们在开发应用中可以更加方便地实现复杂的列表视图。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值