recycle人view多條目以及多條目的點擊事件

一實現多條目
注意創建adapter時繼承
RecyclerView.Adapter不能添加viewholder泛型
如下
RecyclerView.Adapter<HomeAdapter.MyViewHolder>
如果添加泛型是無法使用多個viewholder的
1重寫getviewtype事件
@Override
public int getItemViewType(int position) {
return 1;
}
其中的返回值是根據你的需要返回的
2加載佈局其中viewtype是你的getviewtype的返回值
根據此值來判斷加載哪個item佈局
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

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

return holder2;
}

}
3綁定賦值
根據你的getviewtype返回的值加載不同的viewholder
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
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只寫了兩個再多以此類推
class MyViewHolder extends RecyclerView.ViewHolder {

TextView tv;

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

class MyViewHolder2 extends RecyclerView.ViewHolder {

TextView tv2;
ImageView imageView;

public MyViewHolder2(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 void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
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 class MainAdapter extends XRecyclerView.Adapter implements View.OnClickListener {
Context context;
List<JsonBean.SongListBean> mDatas;
View view;
//點擊事件的接口
private OnItemClickListener mOnItemClickListener = null;

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

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

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

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
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() {
return mDatas.size();
}

@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return 0;
} else {
return 1;
}

}

class MyViewHolder extends RecyclerView.ViewHolder {

TextView tv;

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

class MyViewHolder2 extends RecyclerView.ViewHolder {

TextView tv2;
ImageView imageView;

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

public static interface OnItemClickListener {
void onItemClick(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());
}
}
}

發佈了38 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章