【菜鸟之路】RecyclerView添加Item点击事件

这篇博客介绍了在Android开发中如何为RecyclerView的Item添加点击事件,包括通过RecyclerView的addOnItemTouchListener()方法、在Adapter创建ItemView时添加事件监听以及在ItemView attach RecyclerView时实现。作者分享了在实际项目中采用的第二种方法,并提供了项目链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天下午继续在项目中学着做RecyclerView,想给每个Item添加一个点击跳转,翻了翻买的两本书发现没有呃,只能百度+看看网上前辈们的代码了。
  翻了一些比较不错的文章,了解到大概的几种实现方法:
  1.通过RecyclerView中预留的addOnItemTouchListener()方法
  2.在Adapter创建ItemView时添加事件监听
  3.当ItemView attach RecyclerView时实现
  (出处http://blog.devwiki.net/index.php/2016/07/24/three-ways-click-recyclerview-item.html?utm_source=tuicool&utm_medium=referral)
 
  第1,3种实现在单独的类中,可以使代码更简洁。第2种方法更简单实现,我先试了一下该方法,用在了最近的项目里面(项目地址:http://github.com/LAILAIWA/Slinky2
 
这里我写在了我的Fragment的initData()里面,设置适配器的后面

//添加监听回调
        mAdapter.setClickListener(new GeneralAdapter.ItemClickListener(){
            @Override
            public void OnItemClick(View view, int position) {
                Log.e("-----Item clicked-----",String.valueOf(position));
                Toast.makeText(getActivity(), "Item " + position + " clicked:", Toast.LENGTH_SHORT).show();
                //跳转动作
            }
        });

更改了之前写的adapter

public class GeneralAdapter extends RecyclerView.Adapter<GeneralAdapter.MyViewHolder> {

    private List<team> mDatas;
    private LayoutInflater mInflater;
    private ItemClickListener ClickListener;

    public GeneralAdapter(Context context, List<team> mDatas) {
        this.mDatas = mDatas;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(mInflater.inflate(
                R.layout.item_common_adapter, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        //为holde设置指定数据,将数据绑定到每一个childView中
        team tdata = mDatas.get(position);
        holder.tvTeamTitle.setText(tdata.title);
        holder.tvTeamInfo.setText(tdata.charge1);
        holder.tvTeamType.setText(tdata.type);

        //创建view时添加监听事件
        if(ClickListener != null){
            holder.tvTeamTitle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ClickListener.OnItemClick(view,position);
                }
            });
            holder.tvTeamInfo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ClickListener.OnItemClick(view,position);
                }
            });
            holder.tvTeamType.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ClickListener.OnItemClick(view,position);
                }
            });
        }
    }

    public GeneralAdapter setClickListener(ItemClickListener ClickListener){
        this.ClickListener = ClickListener;
        return this;
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tvTeamTitle;
        TextView tvTeamInfo;
        TextView tvTeamType;

        public MyViewHolder(View view) {
            super(view);
            tvTeamTitle = (TextView) view.findViewById(R.id.text_team_title);
            tvTeamInfo = (TextView) view.findViewById(R.id.text_team_info);
            tvTeamType = (TextView) view.findViewById(R.id.text_team_type);
        }

    }
    public interface ItemClickListener{
        //声明接口ItemClickListener
        void OnItemClick(View view,int position);
//        void OnTitleClick(View view,int position);
//        void OnInfoClick(View view,int position);
//        void OnTypeClick(View view,int position);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值