我想知道如何使用 CursorLoader
来填充屏幕上的小部件。所有在线示例仅适用于使用适配器,效果很好。我需要的是一种可靠的方法来从 Cursor 和 UI 线程更新屏幕中的 View ,并且不会有时因为 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-dev SimonVT
和 readme
后,我帮助我弄清了真相。
没有任何内容表明 onLoadFinished
将在 UI 线程上调用,因此理论上您应该使用 Reto 书中建议的 Handler
。但是,当使用 CursorLoader
(这是迄今为止最常见的用例)时,您几乎可以保证 onLoadFinished
将在 UI 线程中调用。
关于android - 从 onLoadFinished() 中的游标填充小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105885/