RecyclerView的点击事件

RecyclerView

一、简介

这个是谷歌官方出的控件,使我们可以非常简单的做出列表装的一个控件,当然recyclerview的功能不止这些,它还可以做出瀑布流的效果,这是一个非常强大的控件,内部自带viewholder可以使我们非常简单的完成许多操作,正在一步一步取代listview这个控件,当然它也有一些小的缺点,那就是谷歌官方并没有直接给我写出它的点击事件的接口,但是这并难不倒我们,我们可以自己写一个回调的接口,实现点击事件,在这里我不仅要为大家介绍recyclerview的item的点击事件,还要为大家介绍,一个item中局部的点击事件,还有添加header、footer,还有添加不同类别的item的布局。可以说彻底的读懂了这篇文章,我们对recyclerview就有了一个新的认识了。

二、涉及到的知识点

  • item的点击事件
  • item里面内容的点击事件
  • 为recycler view添加header和footer
  • 为item添加不同的布局

三、实现代码

/**
 * Created by linSir on 16/7/24.管理地址界面的适配器
 */
public class ManageAddressAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  //在这里我们要继承自官方为我们写好的适配器

    public OnTitleClickListener mListener;
    private List<AllAddress> mList;  //用户列表

    public ManageAddressAdapter() {
        mList = new ArrayList<>();
    }

    public void setList(List<AllAddress> list) {
  //从外界传入一个list
        mList.clear();
        mList.addAll(list);
        notifyDataSetChanged();
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  //重写方法,用上我们下面写好的viewHoler
        return new ManageAddressViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_manage_address, parent, false));
    }

    @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  //在这里我们将数据和控件绑定起来
        ManageAddressViewHolder mHolder = (ManageAddressViewHolder) holder;
        mHolder.userName.setText(mList.get(position).getShipName());
        mHolder.userTel.setText(mList.get(position).getPhone());

        String address = mList.get(position).getProvince() + " " + mList.get(position).getCity()
                + " " + mList.get(position).getArea() + " " + mList.get(position).getDetail();
        mHolder.address.setText(address);

        mHolder._default.setOnClickListener(new ClickListener(String.valueOf(position)));//在这里我们设置了点击事件

    }

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


    public static class ManageAddressViewHolder extends RecyclerView.ViewHolder {

        private TextView userName;
        private TextView userTel;
        private TextView address;
        private TextView _default;

        public ManageAddressViewHolder(View itemView) {
            super(itemView);
            userName = (TextView) itemView.findViewById(R.id.manage_userName);
            userTel = (TextView) itemView.findViewById(R.id.manage_userTel);
            address = (TextView) itemView.findViewById(R.id.manage_userAddress);
            _default = (TextView) itemView.findViewById(R.id.manage_default);


        }
    }


    public class ClickListener implements View.OnClickListener {
  //在这里我们重写了点击事件
        private String id;

        public ClickListener(String id) {
            this.id = id;
        }

        @Override public void onClick(View view) {
            if (mListener != null) {
                mListener.onTitleClick(id);
            }
        }
    }


    public void setOnTitleClickListener(OnTitleClickListener listener) {
  //自己写了一个方法,用上我们的接口
        mListener = listener;
    }


    public interface OnTitleClickListener {
  //自己写了一个点击事件的接口
        void onTitleClick(String id);
    }


}

通过以上的代码,我

RecyclerView中实现点击事件有两种方式: 1. 在onCreateViewHolder中注册点击事件: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; private OnItemClickListener mListener; public interface OnItemClickListener { void onItemClick(int position); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } // ... @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); final ViewHolder viewHolder = new ViewHolder(view); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { int position = viewHolder.getAdapterPosition(); mListener.onItemClick(position); } } }); return viewHolder; } // ... public static class ViewHolder extends RecyclerView.ViewHolder { // ... public ViewHolder(View itemView) { super(itemView); // ... } } } ``` 2. 定义点击动作: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public interface OnItemClickListener { void onItemClick(int position); } // ... @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); final ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { // ... holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理点击事件 } }); } // ... public static class ViewHolder extends RecyclerView.ViewHolder { // ... public ViewHolder(View itemView) { super(itemView); // ... } } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值