BaseQuickAdapter利用空布局封装加载中布局和错误界面布局

用过BaseQuickAdapter的小伙伴应该都知道他提供给我们设置空布局的方法。但是却没有给我们提供加载中的布局,自己去写布局的话要用一个ProgressBar和RecyclerView一起来做隐藏和显示的控制,很多个界面都有RecyclerView的话每个界面都这样写就有点麻烦了。

 

既然空布局是我们自己定义一个view给adapter,那我们大可利用这个空布局来做加载中的界面鸭。

 

封装3步走: 

1、首先先准备一个空布局的layout:

        view_empty.xml:布局主要包含错误或为空的图片、加载中的转圈圈、以及文字提示。布局比较简单,我就不上代码了,直接上图吧,也看下预览效果

 

2、封装一个总方法:

       特别说明一下,想要显示空布局,首先数据得清空。既然是封装,每次都要做的事当然不会让你自己动手去清空,把它方法封装里面去。利用传过来的adapter的getData得到数据List,再调用它的clear方法清空数据。另外此方法可以写在工具类中或者父类中提供调用,就不用每个地方都要去写一遍。

/**
 * 设置适配器的空布局
 * @param adapter 适配器
 * @param msg 空布局文字提示
 * @param ImgResId 空布局图片资源,若isLoad为true则不生效
 * @param isLoad 是否是加载中
 */
public void setAdapterView(BaseQuickAdapter adapter,String msg,int ImgResId,boolean isLoad){
    //声明全局变量View emptyView;
    if(emptyView == null){
        emptyView = getLayoutInflater().inflate(R.layout.view_empty, null);
    }
    ((TextView)emptyView.findViewById(R.id.textView_msg)).setText(msg);
    if(isLoad){
        emptyView.findViewById(R.id.imageView_img).setVisibility(View.GONE);
        emptyView.findViewById(R.id.progressBar_loading).setVisibility(View.VISIBLE);
    }else{
        ((ImageView)emptyView.findViewById(R.id.imageView_img)).setImageResource(ImgResId);
        emptyView.findViewById(R.id.imageView_img).setVisibility(View.VISIBLE);
        emptyView.findViewById(R.id.progressBar_loading).setVisibility(View.GONE);
    }
    //数据得清空才会显示空布局
    adapter.getData().clear();
    adapter.setEmptyView(emptyView);
    adapter.notifyDataSetChanged();
}

3、 这样就可以愉快的调用了,不过我们可以再进一步封装比较特殊的三个布局:空布局、加载布局、错误布局方法:

/**
 * 显示错误布局
 * @param adapter recyclerView的适配器
 * @param msg 错误信息
 */
public void showErrorView(BaseQuickAdapter adapter,String msg){
     TODO: 2019/6/5 替换错误布局图片
    setAdapterView(adapter,msg,R.mipmap.ic_launcher,false);
}

/**
 * 显示空布局
 * @param adapter recyclerView的适配器
 */
public void showEmptyView(BaseQuickAdapter adapter){
     TODO: 2019/6/5 替换空布局图片
    setAdapterView(adapter,"空空如也",R.mipmap.ic_launcher,false);
}

/**
 * 显示加载中布局
 * @param adapter recyclerView的适配器
 */
public void showLoadView(BaseQuickAdapter adapter){
    setAdapterView(adapter,"加载中……",0,true);
}

4、使用(可以把2、3步写到工具类中提供调用,或者写到父类里面提供调用):

        a、使用之前,首先给一个空数据给RecyclerView设置适配器,建议onCreate的时候就给设置值:

//onCreate里面调用此方法
public void initData() {
        //List list;
        list = new ArrayList<>();
        //SearchAdapter继承了BaseQuickAdapter
        adapter = new SearchAdapter(list);
        //列表布局方式
        recyclerView.setLayoutManager(new LinearLayoutManager(this.getApplicationContext()));
        //设置适配器
        recyclerView.setAdapter(adapter);
}

 

      b、比如我这个搜索功能:

//点击搜索的时候显示loading布局
showLoadView(adapter);

//得到结果后为list添加了数据再notifyDataSetChanged()一下loading布局自然会消失

//然后搜索到数据为空时可以显示空布局:
showEmptyView(adapter);
//搜索出错的错误布局:
showErrorView(adapter,"错误原因")

2020.03.10 补充:

错误布局我们可以给emptyView添加一个点击事件用来重新加载:

public void showErrorView(BaseQuickAdapter adapter, String msg, View.OnClickListener listener) {
        showErrorView(adapter, "加载失败,原因:" + msg + "\n点击重试");
        emptyView.setOnClickListener(listener);
    }

 

完!

转载请注明出处:https://blog.csdn.net/qq_35584878/article/details/90902243

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值