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) {
}
1つの解決策は、onLoadFinished内で直接すべてのカーソルフィールドを取得し、それらすべてをハンドラーに渡して、UIスレッドにウィジェットを設定することです。しかし、カーソルに多くの値がある可能性があるため、これは醜いです。これらすべてに対処するための信頼できるクラッシュのない方法を見つけたいと思います。