解读Recyclerview基类抽取与应用

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  和瀑布流的管理者



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值