一實現多條目
注意創建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:
- //define interface
- public static interface OnItemClickListener {
- void onItemClick(View view , int position);
- }
-
2聲明一個這個接口的變量
- private OnItemClickListener mOnItemClickListener = null;
此方法是要給適配器adapter添加接口
implements View.OnClickListener
3將點擊事件轉移給外面的調用者:
@Override
- public void onClick(View v) {
- if (mOnItemClickListener != null) {
- //注意這裏使用getTag方法獲取position
- mOnItemClickListener.onItemClick(v,(int)v.getTag());
- }
- }
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的方法():
- public void setOnItemClickListener(OnItemClickListener listener) {
- this.mOnItemClickListener = listener;
- }
6調用在mainactivity中
- mAdapter.setOnItemClickListener(new OnItemClickListener(){
- @Override
- public void onItemClick(View view , int position){
- Toast.makeText(MainActivity.this, data[position], 600).show();
- }
- });
完整的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());
}
}
}