天天看点

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));
    }
});
           

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

邮箱:

[email protected] 微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:

公众号.jpg

继续阅读