2-VII-RecyclerView事件

简介: [1].本文接上文:RecyclerView基本使用 [2].RecyclerView把很多事都交给了我们,就连item的点击事件都没有[3].在adapter中加载布局的时候,可以为item添加事件[4].

[1].本文接上文:RecyclerView基本使用
[2].RecyclerView把很多事都交给了我们,就连item的点击事件都没有
[3].在adapter中加载布局的时候,可以为item添加事件
[4].没有点击效果,还要自己添加点击的选择器
[5].RecyclerView增删条目以及条目运动效果


一、点击事件

方式1.修改:FirstRvAdapter#onCreateViewHolder
public FirstViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //加载布局文件
    View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null);
    final FirstViewHolder holder = new FirstViewHolder(itemView);
    //点击监听
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ToastUtil.showAtOnce(mCtx, "Position:"+holder.getLayoutPosition());
        }
    });
    return holder;
}
方式2:可以添加回调,将事件推到Activity中
1.FirstRvAdapter中监听点击事件

    public FirstViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
        //加载布局文件
        final View itemView = LayoutInflater.from(mCtx).inflate(R.layout.item_rv, null);
        final FirstViewHolder holder = new FirstViewHolder(itemView);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onclick(itemView, parent, holder.getLayoutPosition());
                }
            }
        });
        return holder;
    }

    /////////////////////条目点击监听/////////////////////////////////////
    public interface OnItemClickListener {
        void onclick(View itemView, ViewGroup parent, int position);
    }

    private OnItemClickListener mOnItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }
2.Activity中使用:
mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() {
    @Override
    public void onclick(View itemView, ViewGroup parent, int position) {
        ToastUtil.showAtOnce(DiverRVActivity.this, mData.get(position));
    }
});
rv点击1.gif

二、背景选择器

添加点击效果:可以自定义选择器

为item的背景添加:安卓自带波纹样式的选择器

//有边界
android:background="?android:attr/selectableItemBackground"
//无边界
android:background="?android:attr/selectableItemBackgroundBorderless"
rv点击2.gif
也可以自定义水波纹的样式:

v21及以上有效果

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/gray"><!-- press和水波纹的颜色 -->
    <item>
        <!--item中可以自定义shape-->
        <shape
            android:innerRadius="5dp"
            android:shape="rectangle">
            <solid android:color="@color/white"/>
            <corners android:radius="1dp"/>
        </shape>
    </item>
</ripple>

v21以下无效果

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/colorPrimaryDark" android:state_pressed="true"/>
    <item android:drawable="@color/colorPrimary"/>
</selector>

三、添加与删除:效果是单机添加,长按删除

1.FirstRvAdapter中照样子添加长按监听:
    /////////////////////条目长按监听/////////////////////////////////////
    public interface OnItemLongClickListener {
        void onLongClick(View itemView, ViewGroup parent, int position);
    }

    private OnItemLongClickListener mOnItemLongClickListener;

    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
        mOnItemLongClickListener = onItemLongClickListener;
    }
2.FirstRvAdapter添加删除与添加方法:
    /**
     * 添加item
     *
     * @param i 位置
     * @param str 值
     */
    public void addData(int i, String str) {
        data.add(i, str);
        notifyItemInserted(i);//刷新数据
    }

    /**
     * 删除item
     *
     * @param i 位置
     */
    public void deleteData(int i) {
        data.remove(i);
        notifyItemRemoved(i);//刷新数据
    }

3.Activity中使用:
mAdapter.setOnItemClickListener(new FirstRvAdapter.OnItemClickListener() {
    @Override
    public void onclick(View itemView, ViewGroup parent, int position) {
        mAdapter.addData(position, ZRandom.randomCnName());
        mRecyclerView.scrollToPosition(0);//滑动到某个条目
    }
});

mAdapter.setOnItemLongClickListener(new FirstRvAdapter.OnItemLongClickListener() {
    @Override
    public void onLongClick(View itemView, ViewGroup parent, int position) {
        mAdapter.deleteData(position);
    }
});
增加与删除.gif

后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg
相关文章
|
存储 Prometheus 监控
Prometheus 的可视化与仪表盘
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,它能够高效地收集和存储各种指标数据。然而,原始的数据如果没有恰当的可视化工具来呈现,很难从中快速获得有用的信息。Grafana 是一款广泛使用的开源可视化工具,它与 Prometheus 结合得非常好,能够帮助我们创建交互式监控仪表盘。本文将介绍如何使用 Grafana 与 Prometheus 结合,构建美观且实用的监控仪表盘。
465 1
|
8月前
|
供应链 NoSQL Java
用Redisson写一个库存扣减的方法
通过本文的介绍,我们详细讲解了如何使用Redisson实现一个简单的库存扣减功能。通过使用分布式锁,可以确保库存扣减操作的原子性和高效性。希望本文能帮助您更好地理解和应用Redisson,构建高效、可靠的库存管理系统。
288 15
|
前端开发 小程序
微信小程序绘制canvas时在不同 设备上的大小不同的问题
微信小程序绘制canvas时在不同 设备上的大小不同的问题
470 0
|
10月前
|
数据采集 DataWorks 搜索推荐
阿里云DataWorks深度评测:实战视角下的全方位解析
在数字化转型的大潮中,高效的数据处理与分析成为企业竞争的关键。本文深入评测阿里云DataWorks,从用户画像分析最佳实践、产品体验、与竞品对比及Data Studio公测体验等多角度,全面解析其功能优势与优化空间,为企业提供宝贵参考。
427 13
|
11月前
|
存储 数据处理 数据中心
1U和2U服务器应如何正确选择?各有什么优缺点?
标准机架式服务器以U为高度单位,1U和2U服务器各有优缺点。1U服务器体积小、性价比高,但扩展性和散热性较差;2U服务器扩展性好、散热佳、稳定性强,但托管费用较高。不同高度的服务器适用于不同的业务场景,选择时需根据具体需求决定。未来数据中心将根据业务特性选择合适的服务器类型,而非统一采用2U服务器。
300 2
|
11月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
220 4
|
12月前
|
存储 数据挖掘 API
购物平台数据抓取实战指南:从API到深度分析
本指南介绍如何通过API接口抓取淘宝、京东、拼多多等电商平台的数据,涵盖API选择、注册配置、数据抓取与处理、深度分析等内容,帮助企业和开发者挖掘数据价值,支持市场分析和决策制定。
|
人工智能 缓存 搜索推荐
OPENAI DevDay 2024:推动AI技术的新边界
在今年的OPENAI DevDay活动中,尽管形式更为低调,但OpenAI依然带来了四项令人瞩目的技术创新,展示了其在推动人工智能开发者生态方面的持续努力,以及向更高效、用户友好的AI工具转型的决心。我将为大家详细介绍这些新产品
481 10
|
机器学习/深度学习 人工智能 算法
中草药识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
中草药识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
273 0
|
缓存 算法 网络性能优化
解决网络延迟和阻塞,有它,不服都不行!
解决网络延迟和阻塞,有它,不服都不行!
286 0