直接展示Adapter层,
//这里继承的是本类的RecyclerView.Adapter<RecyclerView.ViewHolder>
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int NUMBER_THREE=3;
private static final int NUMBER_TWO=2;
private static final int NUMBER_ONE=1;
private List<NewsBean.ResultBean.DataBean> data;
private MainActivity mainActivity;
public NewsAdapter(MainActivity mainActivity) {
this.mainActivity =mainActivity;
data= new ArrayList<>();
}
public void setData(List<NewsBean.ResultBean.DataBean> data){
this.data=data;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if(i==NUMBER_THREE){
View inflate_three = View.inflate(mainActivity, R.layout.recycle_item_three, null);
return new RecycleThree(inflate_three);
}else if(i==NUMBER_TWO){
View inflate_two = View.inflate(mainActivity, R.layout.recycle_item_twp, null);
return new RecycleTwo(inflate_two);
}else{
View inflate_one = View.inflate(mainActivity, R.layout.recycle_item_one, null);
return new RecycleOne(inflate_one);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
//这里用到了代码的多态性,
((BaseAbstractViewHolder)viewHolder).onBindViewHolder(data.get(i),mainActivity);
//不用抽取出去的话在本类里面配置就行,
/*int itemViewType = viewHolder.getItemViewType();
if(itemViewType==NUMBER_THREE){
RecycleThree recycleThree = (RecycleThree) viewHolder;
recycleThree.tv_three_title.setText(data.get(i).getAuthor_name());
recycleThree.mTv_three_messages.setText(data.get(i).getTitle());
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleThree.mIv_imageview_one);
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s02()).into(recycleThree.iv_imageview_two);
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s03()).into(recycleThree.iv_imageview_three);
}else if(itemViewType==NUMBER_TWO){
RecycleTwo recycleTwo = (RecycleTwo) viewHolder;
recycleTwo.tv_two_title.setText(data.get(i).getAuthor_name());
recycleTwo.tv_two_messages.setText(data.get(i).getTitle());
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleTwo.iv_two_imageview_one);
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s02()).into(recycleTwo.iv_two_imageview_two);
}else{
RecycleOne recycleOne = (RecycleOne) viewHolder;
recycleOne.tv_title.setText(data.get(i).getAuthor_name());
recycleOne.tv_messages.setText(data.get(i).getTitle());
Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleOne.iv_imageview);
}*/
}
@Override
public int getItemCount() {
return data.size();
}
//重写方法
@Override
public int getItemViewType(int position) {
//获取接口里面的图片文件,getThumbnail_pic_s03()是接口里的图片,如果有03
//那么就代表有3个图,如果有02哪就代表有两个,这东西都是接口里面给的。
if((data.get(position).getThumbnail_pic_s03())!=null){
Log.e("3",data.get(position).getThumbnail_pic_s03());
return NUMBER_THREE;
}else if((data.get(position).getThumbnail_pic_s02())!=null){
Log.e("2",data.get(position).getThumbnail_pic_s02());
return NUMBER_TWO;
}else {
Log.e("1",data.get(position).getThumbnail_pic_s());
return NUMBER_ONE;
}
}
//把这三个类抽取出去,让Adapter层看起来更精简
/*
static class RecycleThree extends RecyclerView.ViewHolder {
TextView mTv_three_messages;
TextView tv_three_title;
ImageView mIv_imageview_one;
ImageView iv_imageview_two;
ImageView iv_imageview_three;
public RecycleThree(@NonNull View inflate) {
super(inflate);
mTv_three_messages = inflate.findViewById(R.id.tv_three_messages);
tv_three_title = inflate.findViewById(R.id.tv_three_title);
mIv_imageview_one = inflate.findViewById(R.id.iv_imageview_one);
iv_imageview_two = inflate.findViewById(R.id.iv_imageview_two);
iv_imageview_three = inflate.findViewById(R.id.iv_imageview_three);
}
}*/
/* static class RecycleOne extends RecyclerView.ViewHolder {
TextView tv_messages;
TextView tv_title;
ImageView iv_imageview;
public RecycleOne(@NonNull View inflate) {
super(inflate);
tv_messages = inflate.findViewById(R.id.tv_messages);
tv_title = inflate.findViewById(R.id.tv_title);
iv_imageview = inflate.findViewById(R.id.iv_imageview);
}
}*/
/*static class RecycleTwo extends RecyclerView.ViewHolder {
TextView tv_two_messages;
TextView tv_two_title;
ImageView iv_two_imageview_one;
ImageView iv_two_imageview_two;
public RecycleTwo(@NonNull View inflate) {
super(inflate);
tv_two_messages = inflate.findViewById(R.id.tv_two_messages);
tv_two_title = inflate.findViewById(R.id.tv_two_title);
iv_two_imageview_one = inflate.findViewById(R.id.iv_two_imageview_one);
iv_two_imageview_two = inflate.findViewById(R.id.iv_two_imageview_two);
}
}*/
写一个基类
BaseAbstractViewHolder类
/**
*
* 写一个基类,继承RecyclerView然后让三个子类继承基类,
* 这样可以增加代码阅读性,健壮性,
*/
public abstract class BaseAbstractViewHolder extends RecyclerView.ViewHolder {
public BaseAbstractViewHolder(@NonNull View itemView) {
super(itemView);
}
//写一个静态方法,让每个类的功能在类里面把数据绑定在视图上
public abstract void onBindViewHolder(NewsBean.ResultBean.DataBean newsBean, MainActivity mainActivity);
}
RecycleOne类如下,Two,Three也是一样的只是布局不一样。
让这三个类继承基类
public class RecycleOne extends BaseAbstractViewHolder {
TextView tv_messages;
TextView tv_title;
ImageView iv_imageview;
public RecycleOne(@NonNull View inflate) {
super(inflate);
tv_messages = inflate.findViewById(R.id.tv_messages);
tv_title = inflate.findViewById(R.id.tv_title);
iv_imageview = inflate.findViewById(R.id.iv_imageview);
}
@Override
public void onBindViewHolder(NewsBean.ResultBean.DataBean newsBean, MainActivity mainActivity) {
tv_title.setText(newsBean.getAuthor_name());
tv_messages.setText(newsBean.getTitle());
Glide.with(mainActivity).load(newsBean.getThumbnail_pic_s()).into(iv_imageview);
}
}