私はローダーに関する問題に直面しています。Android-onLoadFinishedが呼び出されていない
私はローカルDBから取得したレコードのリストを表示するアクティビティを持っています。アクティビティが開始されると、レコードはLoaderManager.initLoader()メソッドを介して自動的にロードされます。
ActionBarSherlockの更新ボタンを使用して手動でリストを更新することもできます。ただし、DBにレコードを追加する別のアクティビティを終了した後、onLoadFinishedは呼び出されません。私はここにSimpleCursorLoaderとを使用しています
は活動からのコードスニペットです:
@Override
public void onStart() {
...
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public void onPause() {
...
getSupportLoaderManager().destroyLoader(0);
}
public void refreshRecords() {
getSupportLoaderManager().restartLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle args) {
Loader<Cursor> l = new SimpleCursorLoader(this) {
@Override
public Cursor loadInBackground() {
return recordDAO.getCursor();
}
};
l.forceLoad();
return l;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
// updateUI
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
問題が他の活動を終えた後、onLoaderCreate
が呼び出されるということですが、onLoaderFinished
が呼び出されません。いくつかのデバッグの後、私はSimpleCursorAdapter.deliverResults()
とも呼ばれていること
を見つけた、つぼみは.. if (isReset()) { ..
に終わる私は何かが足りないのですか?どのようにデータのリロードを強制するのですか?
は私が最終的にこの問題を解決するには、
https://groups.google.com/forum/#!topic/android-developers/DbKL6PVyhLI
public static <T> void initLoader(final int loaderId, final Bundle args, final LoaderCallbacks<T> callbacks,
final LoaderManager loaderManager) {
final Loader<T> loader = loaderManager.getLoader(loaderId);
if (loader != null && loader.isReset()) {
loaderManager.restartLoader(loaderId, args, callbacks);
} else {
loaderManager.initLoader(loaderId, args, callbacks);
}
}
私のために働いてください。ありがとうございました。 –
私のために働かない! – Radu
ほぼ正しい解決策:https://groups.google.com/forum/#!topic/android-developers/DbKL6PVyhLI(と私はそれを実験しました)で述べたように、リセット条件は!loader.isReset()です。つまり、 'ローダがリセットされていない場合は、ローダを再起動する必要があります。' (エティエンヌによって書かれた)。あなたの答えを更新してください。 – Pascal