【发布时间】:2015-12-26 14:28:56
【问题描述】:
我正在努力学习 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与它无关,见codeshare.io/wJYDr,当你点击按钮你会看到你的loader重新加载新数据 -
是的,我明白,正如我所说,视频和 API 都说您可以将观察结果留给加载程序。我不是在问这个,而是在问观察的机制。没关系,我只是假设它归结为某种观察者模式,并且对我来说都是神奇的处理。
标签: java android adapter loader