java – Android – 游标加载器如何知道底层数据集已经改变?

我正在尝试学习
Android编程,并且一直在使用Udacity Sunshine应用程序.

有些事让我感到困惑.我有一个内容提供程序,它执行插入,删除,选择等,我有一个游标加载器,它也是一个片段,我有一个游标适配器,除了加载器如何知道数据已更改之外,大部分都是有意义的.

在内容提供程序的更新方法中,它执行此操作,我假设它正在通知数据已更改的内容:

if (rowsUpdated != 0) {
        getContext().getContentResolver().notifyChange(uri, null);
    }

加载器在onCreateLoader方法中设置:

return new CursorLoader(
            getActivity(),
            weatherForLocationUri,
            FORECAST_COLUMNS,
            null,
            null,
            sortOrder
    );

对于用于更新的加载,URI是不同的,但是加载器如何知道数据在下面发生了变化?

适配器在当前光标上有一个句柄,它在onLoadFinished中设置时被加载:

mForecastAdapter.swapCursor(data);

最后,列表视图本身在游标适配器上有一个句柄:

mListView.setAdapter(mForecastAdapter);

我只是不知道如何通过这种机制,加载器知道数据已经改变,以及它如何通知适配器指示它重绘UI?

如果我对此有任何理解是错误的,请纠正我!

最佳答案 游标将自己注册为死者的通知,这意味着当根URI被通知更改时,URI的死者也会被通知,死者可以是任何具有其他路径信息的东西.

点赞