最终效果图
定义子项标识参数
我这里子项有3种类型
public enum Item_Type {
RECYCLEVIEW_ITEM_TYPE_1,
RECYCLEVIEW_ITEM_TYPE_2,
RECYCLEVIEW_ITEM_TYPE_3
}
定义多种viewholder
不同的view中可声明不同的控件
class ViewHolderA extends RecyclerView.ViewHolder {
public ViewHolderA(View itemView) {
super(itemView);
}
}
class ViewHolderB extends RecyclerView.ViewHolder {
public ViewHolderB(View itemView) {
super(itemView);
}
}
class ViewHolderC extends RecyclerView.ViewHolder {
public ViewHolderC(View itemView) {
super(itemView);
}
}
关键点:onCreateViewHolder(填充布局方法)针对不同类型标识发送不同layout
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_1.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_a, null);
ViewHolderA viewHolder = new ViewHolderA(mView);
return viewHolder;
} else if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_2.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_b, null);
ViewHolderB viewHolder = new ViewHolderB(mView);
return viewHolder;
} else if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_3.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_c, null);
ViewHolderC viewHolder = new ViewHolderC(mView);
return viewHolder;
}
return null;
}
使用instance 方法识别 Viewholder 并绑定数据
if (holder instanceof ViewHolderA) {
((ViewHolderA) holder).text.setText(mData.get(position).getText() );
} else if (holder instanceof ViewHolderB) {
((ViewHolderB) holder).text.setText(mData.get(position).getText());
} else if (holder instanceof ViewHolderC) {
((ViewHolderC) holder).text.setText(mData.get(position).getText());
}
案列 MultipleViewRecycleAdapter
public class MultipleViewRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Bean> mData;
private Context context;
public enum Item_Type {
RECYCLEVIEW_ITEM_TYPE_1,
RECYCLEVIEW_ITEM_TYPE_2,
RECYCLEVIEW_ITEM_TYPE_3
}
public RecycleAdapter(Context context, List<Bean> mData) {
this.mData = mData;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_1.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_a, null);
ViewHolderA viewHolder = new ViewHolderA(mView);
return viewHolder;
} else if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_2.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_b, null);
ViewHolderB viewHolder = new ViewHolderB(mView);
return viewHolder;
} else if (viewType == Item_Type.RECYCLEVIEW_ITEM_TYPE_3.ordinal()) {
View mView = LayoutInflater.from(context).inflate(R.layout.recycle_item_c, null);
ViewHolderC viewHolder = new ViewHolderC(mView);
return viewHolder;
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderA) {
((ViewHolderA) holder).text.setText(mData.get(position).getText() + "------样式一");
} else if (holder instanceof ViewHolderB) {
((ViewHolderB) holder).text.setText(mData.get(position).getText() + "------样式二");
} else if (holder instanceof ViewHolderC) {
((ViewHolderC) holder).text.setText(mData.get(position).getText() + "------样式三");
}
}
@Override
public int getItemViewType(int position) {
if (mData.get(position).getType() == 0) {
return Item_Type.RECYCLEVIEW_ITEM_TYPE_1.ordinal();
} else if (mData.get(position).getType() == 1) {
return Item_Type.RECYCLEVIEW_ITEM_TYPE_2.ordinal();
} else if (mData.get(position).getType() == 2) {
return Item_Type.RECYCLEVIEW_ITEM_TYPE_3.ordinal();
}
return -1;
}
@Override
public int getItemCount() {
return mData.size();
}
class ViewHolderA extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderA(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
}
}
class ViewHolderB extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderB(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
}
}
class ViewHolderC extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderC(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
}
}
}
GitHub 源码下载(https://github.com/imcloudfloating/DesignApp)