android 动画 空白页,RecyclerView加空白页

一 说明:

项目中使用recyclerview的时候,经常会在数据列表空白页添加loding空白页面,显示一个特殊的empty view 来提示用户。

二 实现思路

阅读RecyclerView的源码,可以发现里面自带了一个数据观察者AdapterDataObserver用来监听数据的变化(代码在下面),所以我们自然想到了,自定义一个RecyclerView,重写里面的这个类,然后检查数据源的个数是否为0,当为空的时候,把我们先显示的EmptyView显示出来,这个和以前ListView相似。思路比较简单,直接看看代码是怎么实现的。

源码中AdapterDataObserver类

1802176a18a0

image.png

自定义RecyclerView

EmptyRecyclerView

private View emptyView;

private static final String TAG = "EmptyRecyclerView";

final private AdapterDataObserver observer = new AdapterDataObserver() {

@Override

public void onChanged() {

checkIfEmpty();

}

@Override

public void onItemRangeInserted(int positionStart, int itemCount) {

Log.i(TAG, "onItemRangeInserted" + itemCount);

checkIfEmpty();

}

@Override

public void onItemRangeRemoved(int positionStart, int itemCount) {

checkIfEmpty();

}

};

public EmptyRecyclerView(Context context) {

super(context);

}

public EmptyRecyclerView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public EmptyRecyclerView(Context context, AttributeSet attrs,

int defStyle) {

super(context, attrs, defStyle);

}

private void checkIfEmpty() {

if (emptyView != null && getAdapter() != null) {

final boolean emptyViewVisible =

getAdapter().getItemCount() == 0;

emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);

setVisibility(emptyViewVisible ? GONE : VISIBLE);

}

}

@Override

public void setAdapter(Adapter adapter) {

final Adapter oldAdapter = getAdapter();

if (oldAdapter != null) {

oldAdapter.unregisterAdapterDataObserver(observer);

}

super.setAdapter(adapter);

if (adapter != null) {

adapter.registerAdapterDataObserver(observer);

}

checkIfEmpty();

}

//设置没有内容时,提示用户的空布局

public void setEmptyView(View emptyView) {

this.emptyView = emptyView;

checkIfEmpty();

}

}

重写AdapterDataObserver,每次数据变化都会调用onChanged(),所以就在这里检查数据源是否为空,看一下checkIfEmpty()方法,很简单,就是通过Adapter的getCount来判断时候数据为空,空就显示我们定义的EmptyView。

最后在setAdapter的时候调用如下代码就可以了。

1802176a18a0

image.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值