支持设置数据为空时打底view的RecyclerView+支持RecyclerView的CursorAdapter

    自从v7包中的recyclerview出来以后很多之前要用listview实现的效果用recyclerview很简单就实现了,而且性能上也会有所提升,但是RecyclerView也有相比ListView不太方便的地方,比如ListView作为AdapterView的子类,有setEmptyView方法来设置列表为空时显示的view,这个功能一般都会用到,但是官方的RecyclerView并没有提供这个方法,另一方面,之前我们在涉及到数据库列表展示的时候会经常使用CursorAdapter,因为它能够在cursor数据变化时自动更新数据并刷新界面,不用我们手动再去调用,setAdapter之后什么都不用管了,而和RecyclerView配套的RecyclerView.Adapter并没有相关的子类提供类似的功能,那么本文就是要提供一种思路来实现扩展RecyclerView支持setEmptyView(View)和RecyclerView.Adapter支持cursor自动管理数据。

项目地址https://github.com/mingyangShang/SupportRecyclerDemo

主要扩展功能:
  1. SupportRecyclerView#setEmptyView支持设置数据源为空时的view
  2. SupportRecyclerView.SupportAdapter#setOnItemClickListener:设置每个item的点击事件
  3. SupportRecyclerView.SupportAdapter#setOnItemLongClickListener:设置每个item的长按事件
  4. AbstractRecycleCursorAdapter:支持Cursor监听数据实时更新列表

  • RecyclerCursorAdapter
        首先看下CursorAdapter是如何实现自动更新cursor数据的,代码不长,而且其中有很多注释,其实关键的地方也就那么几个。
    1. 观察者模式监听Cursor的变化(init函数):
   if ((flags & FLAG_REGISTER_CONTENT_OBSERVER) == FLAG_REGISTER_CONTENT_OBSERVER) {
            mChangeObserver = new ChangeObserver();
            mDataSetObserver = new MyDataSetObserver();
        } else {
            mChangeObserver = null;
            mDataSetObserver = null;
        }

        if (cursorPresent) {
            if (mChangeObserver != null) c.registerContentObserver(mChangeObserver);
            if (mDataSetObserver != <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值