前言
我们在使用ListView的时候,如果现在没有数据,通过设置setEmptyView()
来展示一个空数据视图,但是RecyclerView并没有这样的方法可以使用,那么如果给RecyclerView添加这一功能,下边给出实现方案!
方案
直接上代码:
public class RecyclerViewForEmpty extends RecyclerView {
private View emptyView;
private AdapterDataObserver observer = new AdapterDataObserver() {
@Override
public void onChanged() {//设置空view原理都一样,没有数据显示空view,有数据隐藏空view
Adapter adapter = getAdapter();
if (adapter.getItemCount() == 0) {
emptyView.setVisibility(VISIBLE);
RecyclerViewForEmpty.this.setVisibility(GONE);
} else {
emptyView.setVisibility(GONE);
RecyclerViewForEmpty.this.setVisibility(VISIBLE);
}
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
onChanged();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
onChanged();
}
};
public RecyclerViewForEmpty(Context context) {
super(context);
}
public RecyclerViewForEmpty(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public void setEmptyView(View view) {
this.emptyView = view;
((ViewGroup) this.getRootView()).addView(view);
}
@Override
public void setAdapter(Adapter adapter) {
super.setAdapter(adapter);
adapter.registerAdapterDataObserver(observer);
observer.onChanged();
}
}