10.RecyclerView中的item点击事件,如何实现

recyclerview的使用方法和listview大同小异,但是使用的adapter确实非常不一样:

1.需要在adapter声明onclickListener()接口,

2.然后创建接口对象,

3.然后实现接口方法,

4.之后在adapte中的vieholder中绑定实例化的控件(这个一定要写,因为你要点击那个控件,实现跳转就需要设置这个控件的点击事件)

5.最后在创建receclorView和adapter对象的类中,实现自定义的onclickListener()方法,方法里面就随便写了


代码:adapter

package zuo.com.ui.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;


import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

import zuo.com.ui.R;
import zuo.com.ui.bean.HomeCagetoryBean;
import zuo.com.ui.bean.RecyclorBean;
import zuo.com.ui.bean.RecyclorItemBean;

/**
 * Created by Administrator on 2016/10/8.
 */
public class HomeCategoryAdapter extends RecyclerView.Adapter<HomeCategoryAdapter.ViewHolder> {

    private  static int VIEW_TYPE_L=0;
    private  static int VIEW_TYPE_R=1;

    private List<RecyclorBean> list;

    private LayoutInflater layoutInflater;

    public OnItemClickListener listener;              //创建item监听器对象

    private View view;

    private Context mcontext;


    public  void setOnItemClickListener(OnItemClickListener listener){            //创建构造函数
        this.listener=listener;
    }


    public HomeCategoryAdapter(List<RecyclorBean> list,Context context){
        this.list=list;
        this.mcontext=context;

    }
   //绑定item布局文件,然后在内部类ViewHolder中绑定item布局文件中的子控件
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        layoutInflater=LayoutInflater.from(parent.getContext());
        if(viewType==VIEW_TYPE_L) {
            view = layoutInflater.inflate(R.layout.template_home_cardview, parent, false);
            return new ViewHolder(view);
        }else{
            view = layoutInflater.inflate(R.layout.template_home_cardview2, parent, false);
            return new ViewHolder(view);
        }
    }

    //绑定数据,即绑定子空间中的数据
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        RecyclorBean recyclorBean=list.get(position);
        holder.textTitle.setText(recyclorBean.getTitle());
//        holder.imageViewBig.setImageResource(homeCagetoryBean.getImgBig());
//        holder.imageViewSmallTop.setImageResource(homeCagetoryBean.getImgSmallTop());
//        holder.imageViewSmallBottom.setImageResource(homeCagetoryBean.getImgSmallButton());
         Log.d("有问题",recyclorBean.getCpOne().getId()+"");
        //在adapter中运用缓存机制,设置图片
        Picasso.with(mcontext).load(recyclorBean.getCpOne().getImgUrl().toString()).into(holder.imageViewBig);
        Picasso.with(mcontext).load(recyclorBean.getCpTwo().getImgUrl().toString()).into(holder.imageViewSmallTop);
        Picasso.with(mcontext).load(recyclorBean.getCpThree().getImgUrl().toString()).into(holder.imageViewSmallBottom);




    }

    //编写方法针对cardview,偶数用cardview的布局一,奇数用布局二
    @Override
    public int getItemViewType(int position) {

        if(position % 2==0){
            return  VIEW_TYPE_R;
        }
        else return VIEW_TYPE_L;


    }
   //返回数据的大小
    @Override
    public int getItemCount() {
        return list.size();
    }
// 绑定item布局文件中的子控件
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView textTitle;
    ImageView imageViewBig;
    ImageView imageViewSmallTop;
    ImageView imageViewSmallBottom;

        public ViewHolder(View itemView) {
            super(itemView);
            textTitle = (TextView) itemView.findViewById(R.id.text_title);
            imageViewBig = (ImageView) itemView.findViewById(R.id.imgview_big);
            imageViewSmallTop = (ImageView) itemView.findViewById(R.id.imgview_small_top);
            imageViewSmallBottom = (ImageView) itemView.findViewById(R.id.imgview_small_bottom);

            //在viewholder中绑定上面控件对象的点击事件,这里的实现方法实际上就和button的点击事件一样
            imageViewBig.setOnClickListener(this);
            imageViewSmallTop.setOnClickListener(this);
            imageViewSmallBottom.setOnClickListener(this);
        }

    @Override
    public void onClick(View v) {
        RecyclorBean recyclorBean=list.get(getLayoutPosition());        //实现绑定控件的时候,获取点击控件的对象,到底是什么对象
        if(listener!=null){
            switch (v.getId()){
                case R.id.imgview_big:                                  //调用重写的onclicklistener()实现绑定
                    listener.onClick(v,recyclorBean.getCpOne());
                    break;
                case R.id.imgview_small_top:
                    listener.onClick(v,recyclorBean.getCpTwo());
                    break;
                case R.id.imgview_small_bottom:
                    listener.onClick(v,recyclorBean.getCpThree());
                    break;
                default:
                    break;
            }

        }

    }
}
//创建recyclorview的监听事件
   public interface OnItemClickListener{
        void onClick(View v,RecyclorItemBean recyclorItemBean);
    }



}
******************************************
******************************************
******************************************
这个地方就是zaiadapter中实现对控件的监听事件的绑定(可以是recyclerview的item,或者adapter绑定的子布局中的控件)
代码:

   public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        SimpleDraweeView draweeView;
        TextView textTitle;
    TextView textPrice;
    Button button;

    public ViewHolder(View itemView) {
        super(itemView);
        draweeView = (SimpleDraweeView) itemView.findViewById(R.id.drawee_view);
        textTitle= (TextView) itemView.findViewById(R.id.text_title);
        textPrice= (TextView) itemView.findViewById(R.id.text_price);
        button= (Button) itemView.findViewById(R.id.hot_button);
//        draweeView.setOnClickListener(this);
        itemView.setOnClickListener(this);
    }

        @Override
        public void onClick(View v) {
            listener.onClick(v,getAdapterPosition());
        }
    }
    //创建recyclorview的监听事件
    public interface OnItemClickListener{
        void onClick(View v,int position);
    }

}

Activity中的代码:
private void initRecyclerView(View view) {

    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);
    homeCategoryAdapter=new HomeCategoryAdapter(list,getContext());
    //加载adapter
    recyclerView.setAdapter(homeCategoryAdapter);
    //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    //设置分割线
    recyclerView.addItemDecoration(new HomeItemDecoration());

    //已经绑定了onclicklitener之后,只需要点击就能实现相应的效果
   homeCategoryAdapter.setOnItemClickListener(new HomeCategoryAdapter.OnItemClickListener() {
       @Override
       public void onClick(View v, RecyclorItemBean recyclorItemBean) {
           Toast.makeText(getContext(),recyclorItemBean.getTitle(),Toast.LENGTH_SHORT).show();
       }
   });


}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RecyclerViewitem点击事件可以通过以下步骤实现: 1. 在RecyclerViewAdapter定义一个接口,用于回调item点击事件。 2. 在ViewHolder设置item点击事件,当item点击时,调用接口的回调方法。 3. 在Activity或Fragment实现接口,处理item点击事件。 具体实现步骤可以参考以下代码: 1. 在Adapter定义接口: ``` public interface OnItemClickListener { void onItemClick(int position); } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } ``` 2. 在ViewHolder设置item点击事件: ``` public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); itemView.setOnClickListener(this); } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(getAdapterPosition()); } } } ``` 3. 在Activity或Fragment实现接口: ``` mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { // 处理item点击事件 } }); ``` 以上就是RecyclerViewitem点击事件实现方法。 ### 回答2: RecyclerView是Android一个非常常用的控件之一。它是ListView的升级版,具有更好的性能和更强的可扩展性,因为它可以使用不同的布局管理器来定义不同的布局。 在RecyclerView,每个item都是由一个ViewHolder来控制,因此我们可以通过对ViewHolder进行控制来实现item点击事件。 首先,我们需要在RecyclerView的适配器item添加点击事件监听器。为此,我们需要定义一个接口来处理点击事件: public interface OnItemClickListener { void onItemClick(View view, int position); } 其,View代表被点击的View,position代表item的位置。 然后,在RecyclerView的ViewHolder,我们需要将点击事件与ViewHolder绑定在一起,以便处理点击事件: public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private OnItemClickListener mListener; public ViewHolder(View itemView, OnItemClickListener listener) { super(itemView); mListener = listener; itemView.setOnClickListener(this); } @Override public void onClick(View v) { if (mListener != null) { mListener.onItemClick(v, getAdapterPosition()); } } } 在ViewHolder,我们首先将监听器传递进来,并将itemView的点击事件和ViewHolder绑定在一起。当itemView被点击时,就会调用onClick方法,我们在onClick方法点击事件通过接口传递给外部进行处理。 最后,在RecyclerView的适配器,我们需要实现OnItemClickListener接口,以处理item点击事件: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements OnItemClickListener { //其他代码省略 @Override public void onBindViewHolder(ViewHolder holder, int position) { //设置item的数据 holder.itemView.setTag(position); } @Override public void onItemClick(View view, int position) { //处理点击事件 Toast.makeText(mContext, "你点击了第" + position + "个item", Toast.LENGTH_SHORT).show(); } } 在适配器,我们需要将OnItemClickListener绑定在ViewHolder,并在onBindViewHolder方法设置item的数据。当item点击时,就会调用onItemClick方法,我们可以在这里处理item点击事件。 综上所述,通过以上步骤,我们可以实现RecyclerView item点击事件。 ### 回答3: RecyclerView是Android常用的视图控件之一,它具有高度的可扩展性和足够的定制化能力,以满足开发人员的需求。RecyclerView的每个item都可以添加点击事件,来实现item的响应。 为RecyclerViewitem添加点击事件,需要通过实现RecyclerView的OnItemClickListener接口来实现。首先,需要编写一个自定义的RecyclerViewAdapter类,并在 onCreateViewHolder() 方法为每个item添加点击事件监听器。 在onCreateViewHolder()方法,创建view holder并返回。 可以在这个方法设置监听器,如以下代码示例所示: ``` @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View view = LayoutInflater.from(context).inflate(R.layout.your_layout_file, parent, false); // set the view's size, margins, paddings and layout parameters RecyclerViewHolder viewHolder = new RecyclerViewHolder(view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // item 点击事件处理 } }); return viewHolder; } ``` 在监听器的onClick()方法,我们可以根据需求来实现item点击响应,例如打开一个新的activity或是刷新当前的activity等。 另外,也可以通过在自定义的RecyclerViewHolder类item添加点击事件,有时候 为了给不同类型的view设置不同的点击事件时,我们需要根据view type来设置点击响应。 ``` class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView textView; RecyclerViewHolder(View view) { super(view); textView = view.findViewById(R.id.text_view); view.setOnClickListener(this); } @Override public void onClick(View v) { // item点击事件处理 } } ``` 综上所述,RecyclerViewitem点击事件可以通过实现RecyclerView的OnItemClickListener接口来实现,添加点击监听器可以通过在onCreateViewHolder()方法为每个item添加点击事件监听器或是在自定义ViewHolder实现。根据需求可以针对不同情况进行调整实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值