ContentObserver和DataSetObserver区别

ContentObserver是一个提前通知,这时候只是通知cursor说,我的内容变化了。
DataSetObserver是一个后置通知,只有通过requery() deactivate() close()方法的调用才能获得这个通知。

 因此,最为重要的还是ContentObserver,它可以告诉你数据库变化了,当然如果你要在更新完Cursordataset之后做一些
事情,datasetObserver也是必需的。

 

附上CursorAdapter部分源码:

 

    protected void onContentChanged() {

        if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {

            if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");

            mDataValid = mCursor.requery();

        }

    }

 

 

    private class ChangeObserver extends ContentObserver {

        public ChangeObserver() {

            super(new Handler());

        }

 

        @Override

        public boolean deliverSelfNotifications() {

            return true;

        }

 

        @Override

        public void onChange(boolean selfChange) {

            onContentChanged();

        }

    }

 

    private class MyDataSetObserver extends DataSetObserver {

        @Override

        public void onChanged() {

            mDataValid = true;

            notifyDataSetChanged();

        }

 

        @Override

        public void onInvalidated() {

            mDataValid = false;

            notifyDataSetInvalidated();

        }

    }

 

 

1、ChangeObserver 监听到数据库变化,执行onContentChanged()方法中mCursor.requery()

2、MyDataSetObserver 监听mCursor数据集改变, notifyDataSetChanged()刷新界面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值