用过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