recycle人view多条目以及多条目的点击事件

来源:互联网 发布:儿童恐龙玩具淘宝 编辑:程序博客网 时间:2024/06/09 01:01
一实现多条目
注意创建adapter时继承
RecyclerView.Adapter不能添加viewholder泛型
如下
RecyclerView.Adapter<HomeAdapter.MyViewHolder>
如果添加泛型是无法使用多个viewholder的
1重写getviewtype事件
@Override
public int getItemViewType(int position) {
return 1;
}
其中的返回值是根据你的需要返回的
2加载布局其中viewtype是你的getviewtype的返回值
根据此值来判断加载哪个item布局
@Override
publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {

if(viewType ==0) {
view= LayoutInflater.from(context).inflate(R.layout.item_recycler,parent, false);
MyViewHolder holder = newMyViewHolder(view);
returnholder;
}else{
view= LayoutInflater.from(context).inflate(R.layout.item2,parent, false);
MyViewHolder2 holder2 = newMyViewHolder2(view);

returnholder2;
}

}
3绑定赋值
根据你的getviewtype返回的值加载不同的viewholder
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position)==0){
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);

}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);

}
4viewholder根据你的item写里面的findbyid只写了两个再多以此类推
classMyViewHolderextendsRecyclerView.ViewHolder {

TextViewtv;

publicMyViewHolder(View view) {
super(view);
tv= (TextView) view.findViewById(R.id.id_num);
}
}

classMyViewHolder2extendsRecyclerView.ViewHolder {

TextViewtv2;
ImageViewimageView;

publicMyViewHolder2(View view) {
super(view);
tv2= (TextView) view.findViewById(R.id.item2_text);
imageView= (ImageView) view.findViewById(R.id.item2_image);
}
}

二点击事件
多条目点击事件
步骤
adapter中
自定义一个继承自RecyclerView.Adapter的MyAdapter。
1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener:
  1.  //define interface
  2.     public static interface OnItemClickListener {
  3.         void onItemClick(View view , int position);
  4.     }

2声明一个这个接口的变量
  1.     private OnItemClickListener mOnItemClickListener = null;

此方法是要给适配器adapter添加接口
implements View.OnClickListener
3将点击事件转移给外面的调用者:
@Override
  1.     public void onClick(View v) {
  2.         if (mOnItemClickListener != null) {
  3.             //注意这里使用getTag方法获取position
  4.             mOnItemClickListener.onItemClick(v,(int)v.getTag());
  5.         }
  6.     }
4注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position
@Override
public voidonBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position) ==0) {
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);

}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);

}

5最后暴露给外面的调用者,定义一个设置Listener的方法():
  1.  public void setOnItemClickListener(OnItemClickListener listener) {
  2.         this.mOnItemClickListener = listener;
  3.     }
6调用在mainactivity中
  1.  mAdapter.setOnItemClickListener(new OnItemClickListener(){
  2.             @Override    
  3.             public void onItemClick(View view , int position){
  4.                 Toast.makeText(MainActivity.this, data[position], 600).show();
  5.             }
  6.         });

完整的adapter

public classMainAdapterextendsXRecyclerView.AdapterimplementsView.OnClickListener {
Contextcontext;
List<JsonBean.SongListBean>mDatas;
Viewview;
//点击事件的接口
privateOnItemClickListenermOnItemClickListener=null;

publicMainAdapter(Context context,List<JsonBean.SongListBean> list) {
this.context= context;
this.mDatas= list;
}

@Override
publicRecyclerView.ViewHolderonCreateViewHolder(ViewGroup parent, intviewType) {

if(viewType ==0) {
view= LayoutInflater.from(context).inflate(R.layout.item_recycler,parent, false);
MyViewHolder holder = newMyViewHolder(view);
returnholder;
}else{
view= LayoutInflater.from(context).inflate(R.layout.item2,parent, false);
MyViewHolder2 holder2 = newMyViewHolder2(view);
returnholder2;
}
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
if(getItemViewType(position) ==0) {
((MyViewHolder) holder).tv.setText(mDatas.get(position).getTitle());
// view.setOnClickListener(this);

}else{
((MyViewHolder2) holder).tv2.setText(mDatas.get(position).getAuthor());
Glide.with(context).load(mDatas.get(position).getPic_small()).into(((MyViewHolder2) holder).imageView);
}
// 多条目点击事件
holder.itemView.setTag(position);
holder.itemView.setOnClickListener(this);

}

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

@Override
public int getItemViewType(intposition) {
if(position %2==0) {
return0;
}else{
return1;
}

}

classMyViewHolderextendsRecyclerView.ViewHolder {

TextViewtv;

publicMyViewHolder(View view) {
super(view);
tv= (TextView) view.findViewById(R.id.id_num);
}
}

classMyViewHolder2extendsRecyclerView.ViewHolder {

TextViewtv2;
ImageViewimageView;

publicMyViewHolder2(View view) {
super(view);
tv2= (TextView) view.findViewById(R.id.item2_text);
imageView= (ImageView) view.findViewById(R.id.item2_image);
}
}

public static interface OnItemClickListener {
voidonItemClick(View view, int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener= listener;
}

@Override
public void onClick(View v) {
if(mOnItemClickListener!=null) {
//注意这里使用getTag方法获取position
mOnItemClickListener.onItemClick(v,(int) v.getTag());
}
}
}

原创粉丝点击