로더와 관련된 문제가 있습니다.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
가 호출되지 않습니다.
, 나는 새싹 내가 뭔가를 놓치고 있습니까
.. if (isReset()) { ..
에 끝, SimpleCursorAdapter.deliverResults()
도 불린다 것으로 나타났습니다? 강제로 데이터를 다시로드하는 방법?
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