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


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值