我正在学习Android编程,并一直在使用Udacity Sunshine应用程序。
有一些令我困惑的地方。我有一个内容提供者,它执行插入、删除、选择等操作,我有一个光标加载器,它也是一个片段,我有一个光标适配器,其中大部分都很好理解,除了加载器如何知道数据已经更改。
在内容提供者的更新方法中,它执行以下操作,我认为是通知某些东西数据已经更改:
if (rowsUpdated != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
加载器在onCreateLoader方法中设置:
return new CursorLoader(
getActivity(),
weatherForLocationUri,
FORECAST_COLUMNS,
null,
null,
sortOrder
);
虽然用于加载的URI与用于更新的URI不同,但是加载器如何知道数据在其下面发生了变化?
适配器在onLoadFinished中设置时具有对当前已加载光标的处理:
mForecastAdapter.swapCursor(data);
最后,列表视图本身对游标适配器有一个处理句柄:
mListView.setAdapter(mForecastAdapter);
我不明白通过这个机制,加载程序如何知道数据已更改以及如何通知适配器指示它重新绘制UI?
如果我对此的任何理解是错误的,请纠正我!
CursorAdapter
与此无关,请参见 http://codeshare.io/wJYDr,当您单击按钮时,您将看到您的加载器重新加载新数据。 - pskink