我正在尝试学习
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的死者也会被通知,死者可以是任何具有其他路径信息的东西.