我想知道如何使用CursorLoader
在屏幕上填充小部件。所有在线的例子都只适用于使用适配器,而且效果很好。我需要的是一种可靠的方法,可以从光标和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线程上填充小部件。但这很难看,因为光标中可能有很多值。我很想找到一个可靠的无碰撞的方法来处理这一切。
最佳答案
在询问了android devSimonVT
和readme
之后,我终于明白了这一点。
没有任何东西会声明onLoadFinished
将在ui线程上被调用,因此在理论上,您应该像reto的书中建议的那样使用Handler
。然而,当使用CursorLoader
时(这是目前为止最常见的用例),您几乎可以保证onLoadFinished
将在ui线程中被调用。