Android——如何监听RecyclerView中每一条Item的点击

本文主要讲述如何为RecyclerView的每一条Item设置不同的点击事件,只对必要操作进行分析

在RecyclerView的Adapter中需要执行的操作:

//创建监听对象
	private ItemOnClickListener mItemOnClickListener;
	
//创建设置监听的方法
    public void setItemOnClickListener(ItemOnClickListener mItemOnClickListener) {
        this.mItemOnClickListener = mItemOnClickListener;
    }
//创建点击事件接口,将view和条目数i作为参数
    public interface ItemOnClickListener {
        public void onClick(View view, int i);
    }
    
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
	//通过实例化类的对象,根据条目i获取指定的List中的数据,绑定到viewHolder中
        messageUtils = messageUtilsList.get(i);
        viewHolder.message.setText(messageUtils.getMessage());
		//创建viewHolder的点击监听
		//该监听触发的逻辑就是mItemOnClickListener.onClick(v,i)中的逻辑
		//具体的逻辑实现在继承onClick的类中
        viewHolder.message.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mItemOnClickListener!=null){
				//调用监听器对象的点击方法
                mItemOnClickListener.onClick(v,i);
            }
            }
        });
    }

在使用到该RecyclerView的类中需要执行的操作:

//创建Adapter对象
	MessageAdapter messageAdapter = new MessageAdapter(messageUtilsList, getContext());
//调用Adapter中设置监听的方法
	messageAdapter.setItemOnClickListener(new MessageAdapter.ItemOnClickListener() {
            @Override
            public void onClick(View view, int i) {
                //i 就是被点击的Item的条目数
                //此处即可根据i来设置不同的Item的点击事件效果
            }
        });

转载请注明出处:https://blog.csdn.net/YJ21712/article/details/123847250

要实现 RecyclerView 最后一个 Item点击事件,可以在 RecyclerView.Adapter 覆盖 getItemViewType 方法,并根据 position 判断当前 item 是否为最后一个,如果是最后一个,则返回一个特殊的 ViewType;在 onCreateViewHolder 根据 ViewType 返回不同的 ViewHolder,最后一个 ViewHolder 设置监听事件。 代码示例: ``` public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<String> mList; // 定义最后一个 item 的 ViewType private static final int TYPE_FOOTER = 1; // 重写 getItemViewType 方法,根据 position 判断是否为最后一个 item @Override public int getItemViewType(int position) { if (position == getItemCount() - 1) { return TYPE_FOOTER; } return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_FOOTER) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer, parent, false); return new FooterViewHolder(view); } else { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_normal, parent, false); return new NormalViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof NormalViewHolder) { ((NormalViewHolder) holder).bindData(mList.get(position)); } else if (holder instanceof FooterViewHolder) { // 最后一个 item 的 ViewHolder 设置监听事件 ((FooterViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击事件处理 } }); } } @Override public int getItemCount() { // 注意 getItemCount 方法需要加上最后一个 item return mList.size() + 1; } static class NormalViewHolder extends RecyclerView.ViewHolder { public NormalViewHolder(View itemView) { super(itemView); // itemView 的初始化操作 } public void bindData(String data) { // 数据绑定操作 } } static class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View itemView) { super(itemView); // itemView 的初始化操作 } } } ``` 其item_footer.xml 是最后一个 item 的布局文件。在 RecyclerView.Adapter ,getItemCount 方法需要加上最后一个 item。 这样就可以实现 RecyclerView 最后一个 Item点击事件了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值