recyclerview加载多种布局
Posted wang-jingyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了recyclerview加载多种布局相关的知识,希望对你有一定的参考价值。
首先recyclerview适配器继承自RecyclerView.Adapter 不是之前的那个
public class MyDetailsAdapter extends RecyclerView.Adapter {
//设置常量
//平台
private static final int LEFT = 1;
//用户
private static final int RIGHT = 0;
//头部
private static final int TITLE = 3;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder holder = getViewHolderByViewType(viewType);
return holder;
}
/**
* 根据不同的position,设置不同的ViewType
* position表示当前是第几个Item,通过position拿到当前的Item对象,然后判断这个item对象需要那种视图
*/
@Override
public int getItemViewType(int position) {
if (myFeedbackDetailsModels.get(position).getSource().equals("1")) {
return LEFT;
} else if (myFeedbackDetailsModels.get(position).getSource().equals("0")) {
return RIGHT;
} else if (myFeedbackDetailsModels.get(position).getSource().equals("null")) {
return RIGHT;
} else if (myFeedbackDetailsModels.get(position).getSource().equals("3")) {
return TITLE;
}
return 0;
}
private RecyclerView.ViewHolder getViewHolderByViewType(int viewType) {
View left = View.inflate(mContext, R.layout.left_item, null);
View right = View.inflate(mContext, R.layout.right_item, null);
View title = View.inflate(mContext, R.layout.title_item, null);
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case LEFT:
holder = new ViewHolderLeft(left);
break;
case RIGHT:
holder = new ViewHolderRight(right);
break;
case TITLE:
holder = new ViewHolderTitle(title);
break;
}
return holder;
}
//用于绑定数据
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//调用哪个布局就给那个布局绑定数据
if (holder instanceof ViewHolderLeft){
} else if (holder instanceof ViewHolderTitle) {
}else if (holder instanceof ViewHolderRight) {
}
}
//给每个布局加一个viewholder
private class ViewHolderLeft extends RecyclerView.ViewHolder {
TextView tv_date, tv_text, tv_no, tv_yes;
ImageView iv_head, iv_photo;
LinearLayout ll_solve;
public ViewHolderLeft(View itemView) {
super(itemView);
tv_date = itemView.findViewById(R.id.tv_date);
tv_text = itemView.findViewById(R.id.tv_text);
iv_head = itemView.findViewById(R.id.iv_head);
iv_photo = itemView.findViewById(R.id.iv_photo);
ll_solve = itemView.findViewById(R.id.ll_solve);
tv_no = itemView.findViewById(R.id.tv_no);
tv_yes = itemView.findViewById(R.id.tv_yes);
}
}
private class ViewHolderRight extends RecyclerView.ViewHolder {
TextView tv_date, tv_text;
ImageView iv_head;
ImageView iv_photo;
public ViewHolderRight(View itemView) {
super(itemView);
tv_date = itemView.findViewById(R.id.tv_date);
tv_text = itemView.findViewById(R.id.tv_text);
iv_head = itemView.findViewById(R.id.iv_head);
iv_photo = itemView.findViewById(R.id.iv_photo);
iv_head = itemView.findViewById(R.id.iv_head);
}
}
private class ViewHolderTitle extends RecyclerView.ViewHolder {
TextView tv_date, tv_text;
ImageView iv_head;
ImageView iv_img1, iv_img2, iv_img3, iv_more;
LinearLayout ll_img;
public ViewHolderTitle(View itemView) {
super(itemView);
tv_date = itemView.findViewById(R.id.tv_date);
tv_text = itemView.findViewById(R.id.tv_text);
iv_head = itemView.findViewById(R.id.iv_head);
//图片一
iv_img1 = itemView.findViewById(R.id.iv_img1);
//图片二
iv_img2 = itemView.findViewById(R.id.iv_img2);
//图片三
iv_img3 = itemView.findViewById(R.id.iv_img3);
//显示更多
iv_more = itemView.findViewById(R.id.iv_more);
//图片布局
ll_img = itemView.findViewById(R.id.ll_img);
}
}
以上是关于recyclerview加载多种布局的主要内容,如果未能解决你的问题,请参考以下文章
1.Android recycleView万能分隔线 GridLayoutManager布局item左右间距均等(最易懂)
android RecyclerView的Linear布局案例