我想知道如何使用CursorLoader
在屏幕上填充小部件。在线的所有示例仅用于使用适配器,这非常有用。我需要的是一种可靠的方法来更新我的屏幕中的视图,从Cursor和UI线程,有时没有崩溃,因为StaleDataException
或光标突然停用。这是我目前的方法,但我仍然收到用户的一些崩溃报告。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
CursorLoader loader = null;
switch (id) {
case LOADER_ID_DATA:
loader = new CursorLoader(...);
break;
}
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, final Cursor cursor) {
handler.post(new Runnable() {
@Override
public void run() {
if (getActivity() == null)
return;
updateView(cursor);
}
});
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
一种解决方案是直接在onLoadFinished中检索所有光标字段,并将它们全部传递给处理程序以填充UI线程上的窗口小部件。但这很难看,因为我可能在光标中有很多值。我很想找到一种可靠的无碰撞方式来处理这一切。
答案 0 :(得分:7)
在询问#android-dev SimonVT
和readme
后,我帮助我了解了这一点。
没有任何内容表明将在UI线程上调用onLoadFinished
所以理论上你应该使用像Reto的书中建议的Handler
。但是,当使用CursorLoader
(这是迄今为止最常见的用例)时,您几乎可以保证在UI线程中调用onLoadFinished
。