recyclerview是当下比较广泛应用的展示框架,不仅可以实现不同的布局方式,而且数据添加也方便很多。
接下来,带给大家的是recyclerview的基类抽取与绑定的简便实用。
首先要创建我们的基类
public abstract class TypeabstractViewholder extends RecyclerView.ViewHolder {
public TypeabstractViewholder(View itemView) {
super(itemView);
}
public abstract void bindholder(Mbean.ResultBean.DataBean dome);
}
创建我们的适配器,与普通的适配器不同的是recyclerview创建的是自身的viewholder的适配
public class Recyclerviewadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
//定义变量 创建构造方法传值
private List<Mbean.ResultBean.DataBean> list;
private LayoutInflater inflater;
public Recyclerviewadapter(List<Mbean.ResultBean.DataBean> list, Context context) {
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType){
case 1:
return new Oneviewholder(inflater.inflate(R.layout.item1, parent, false));
case 2:
return new Twoviewholder(inflater.inflate(R.layout.item2, parent, false));
case 3:
return new Oneviewholder(inflater.inflate(R.layout.item1, parent, false));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((TypeabstractViewholder)holder).bindholder(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
//根据图片网址的非空判断 来执行多条目的设置
@Override
public int getItemViewType(int position) {
if (list.get(position).thumbnail_pic_s03!=null){
return 3;
}else if(list.get(position).thumbnail_pic_s02==null){
return 1;
}else{
return 2;
}
}
}
我们可以看到抽取基类的话,我们在绑定数据里面进行的操作不在是进行绑定布局,而是直接引用的抽象类的方法进行传参。
((TypeabstractViewholder)holder).bindholder(list.get(position));
然后在
onCreateViewHolder方法里面进行绑定布局类,
public class Oneviewholder extends TypeabstractViewholder {
private final ImageView image_item1;
private final TextView textview_item1;
private final TextView tv_time_item1;
private final TextView tv_count_item1;
private String pic_s;
private String title;
public Oneviewholder(View itemView) {
super(itemView);
image_item1 = (ImageView) itemView.findViewById(R.id.image_item1);
textview_item1 = (TextView) itemView.findViewById(R.id.textview_item1);
tv_time_item1 = (TextView) itemView.findViewById(R.id.tv_time_item1);
tv_count_item1 = (TextView) itemView.findViewById(R.id.tv_count_item1);
}
@Override
public void bindholder(Mbean.ResultBean.DataBean dome) {
OkHttpManager manager = OkHttpManager.getinstance();
pic_s = dome.thumbnail_pic_s;
title = dome.title;
manager.LoadImage(pic_s, new OkHttpManager.Func2() {
@Override
public void onResponse(byte[] result) {
Bitmap bitmap1 = BitmapFactory.decodeByteArray(result,0,result.length);
image_item1.setImageBitmap(bitmap1);
}
});
textview_item1.setText(title);
tv_count_item1.setText("暂无数据");
tv_time_item1.setText(dome.date);
}
}
创建布局类之后 在里面继承我们的抽象类,来获取 bindholder方法 进行相应的数据展示设置
当然,重要的事情只说一遍,recyclerview一定要创建适配器之后进行设置布局管理器,不然你的主UI界面会一片空白
布局管理器的设置也非常简单,直接用我们的recyclerview对象获取管理器即可
控件对象.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false))
参数1、是我们的上下文 参数2、是我们的布局方向(水平和垂直) 参数3、比较高大上(可以设置我们的排序方式 false和true 正序和倒序)
在这里面呢可以设置不同的管理器来展示不同的界面效果,可以设置为gridlayoutmanager 和瀑布流的管理者