• 2-VII-RecyclerView事件


    [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));
        }
    });
    
    9414344-3d37b3cd5835a862.gif
    rv点击1.gif

    二、背景选择器

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

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

    //有边界
    android:background="?android:attr/selectableItemBackground"
    //无边界
    android:background="?android:attr/selectableItemBackgroundBorderless"
    
    9414344-80077f0f02a0fc6e.gif
    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);
        }
    });
    
    9414344-3fe9d8e3ae10c346.gif
    增加与删除.gif

    后记、

    1.声明:

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

    2.连接传送门:

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

    3.联系我

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

    4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
    9414344-c474349cd3bd4b82.jpg
    公众号.jpg
  • 相关阅读:
    xlwt 写sheet xls 文件
    xlrd 安装步骤
    托管DLL和非托管DLL的区别
    MongoDB 第一篇
    memcache
    gitignore忽略规则
    GIT 学习笔记
    前端渲染模板(一):Thymeleaf
    架构实战项目心得(十四):spring-boot结合Swagger2构建RESTful API测试体系
    架构实战项目心得(十一):基于spring-security-oauth2的mysql数据表设计
  • 原文地址:https://www.cnblogs.com/toly-top/p/9781913.html
Copyright © 2020-2023  润新知