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