![cover](https://img-blog.csdnimg.cn/7f6e80e571fc4af1919c33714ca7d782.png)
安卓RecyclerView设置空数据图片(用SmartRefreshLayout 刷新框架)
使用场景学生写课设没有太多时间写代码了,着急交公司里adapter被多层封装过了,被多处引用,再加接口,工作强度大。重新自定义的 adapter或者使用其他的adapter框架,可能会与公司风格不一致或者其他问题。如果符合这两个场景,可以使用本文的思路。如果时间充足,代码工作强度不是很大,为了提升自己的技术能力,还是建议设置空视图写在 adapter 里,框架的话推荐 BaseQuickAdapt
使用场景
-
学生写课设没有太多时间写代码了,着急交
-
公司里adapter被多层封装过了,被多处引用,再加接口,工作强度大。重新自定义的 adapter或者使用其他的adapter框架,可能会与公司风格不一致或者其他问题。
如果符合这两个场景,可以使用本文的思路。如果时间充足,代码工作强度不是很大,为了提升自己的技术能力,还是建议设置空视图写在 adapter 里,框架的话推荐 BaseQuickAdapter。
BaseQuickAdapter 中有 setEmptyView() 方法:
View inflate = View.inflate(getActivity(), R.layout.item_car_empty_view, null);
inflate.findViewById(R.id.tv_data).setOnClickListener(v -> {
AppManager.getAppManager().finishOthersActivity(HomeActivity.class);
});
carAdapter.setEmptyView(inflate);
思路
空数据图片用 Imageview 显示,然后根据 RecyclerView 的数据量控制显示隐藏。因为用了SmartRefreshLayout 刷新框架,所以 Imageview 的显示隐藏就写在 SmartRefreshLayout 的两个获取数据的监听事件中 --- 刷新监听 setOnRefreshListener、加载监听 setOnLoadMoreListener。
实现
1 xml布局
用 RelativeLayout 把 Imageview 、RecyclerView 包在一起,Imageview 水平居中。
Imageview 初始设置为不显示,visibility="gone"。
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/srl_sales_data_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srlAccentColor="@color/tab_select_color"
app:srlPrimaryColor="@color/white">
<com.scwang.smartrefresh.header.BezierCircleHeader
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_sales_data_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white" />
<ImageView
android:visibility="gone"
android:id="@+id/iv_empty_data"
android:layout_marginTop="@dimen/dp_15"
android:layout_centerHorizontal="true"
android:src="@mipmap/ic_empty_data"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/>
</RelativeLayout>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
2 Activity
在SmartRefreshLayout 的两个监听事件中 --- 刷新监听setOnRefreshListener、加载监听setOnLoadMoreListener,获取 RecyclerView 的数据,根据数据量和页数控制 Imageview 的显示隐藏。
// SmartRefreshLayout 下拉刷新和上拉加载
refreshLayout.setEnableLoadMore(true);
// 下拉刷新,一直都是第一页
refreshLayout.setOnRefreshListener(refreshLayout -> {
page = 1;
// Imageview 在第一页初始设置为隐藏,有数据了再显示
iv_empty_data.setVisibility(View.GONE);
// 获取数据
mPresenter.listInStockData();
});
// 上拉加载
refreshLayout.setOnLoadMoreListener(refreshLayout -> {
page++;
mPresenter.listInStockData();
});
// 数据获取成功后的回调
@Override
public void onGetSuccess(ArrayList<InStockDataBean> stockDataBeans) {
if (page == 1) {
//当是第一页的时候,如果数据为空的,就清空列表数据
if (stockDataBeans == null) {
stockDataBeans = new ArrayList<>();
}
if (stockDataBeans !=null && stockDataBeans.size() == 0) {
// 第一页空数据时显示图片
iv_empty_data.setVisibility(View.VISIBLE);
}
adapter.setData(stockDataBeans);
} else if (page > 1) {
//如果页数大于第一页,如果数据为空,就不处理,并且页数减一
if (stockDataBeans == null || stockDataBeans.size() < 1) {
page--;
showToast("没有更多数据了!");
return;
}
adapter.addData(stockDataBeans);
}
}
3 效果
无数据时
下拉刷新时
有数据时
更多推荐
所有评论(0)