我在onLoadFinished中有代码行,用于片段中的Loader Manager回调。代码的问题是需要在ArrayAdapter中显示favoriteMovies,因此无论什么原因,它都为零,而日志语句显示游标或数据不为空。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount());
if (data != null && data.getCount() > 0) {
while (data.moveToNext()) {
favouriteMovies.add(
new Movie(
data.getString(2),
data.getString(3),
data.getString(4),
data.getInt(1),
data.getString(5),
data.getDouble(6),
data.getDouble(7)
));
}
setMovies(favouriteMovies);
hideLoadingProgress();
mAdapter.notifyDataSetChanged();
} else {
showEmptyView(EMPTY_VIEW_TYPE_LOCAL);
hideLoadingProgress();
}
}
如何编写此代码,以便在调用setMovies()方法之前实际等待while语句完成。当我将我的应用程序最小化到后台并恢复它时,电影会被显示,但它在第一次被调用时不起作用。
答案 0 :(得分:0)
经过多次试验,我必须检查光标以确定它是否是最后一个索引,然后调用我的其他函数,如下所示。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount());
favouriteMovies.clear();
if (data != null && data.getCount() > 0) {
while (data.moveToNext()) {
favouriteMovies.add(
new Movie(
data.getString(2),
data.getString(3),
data.getString(4),
data.getInt(1),
data.getString(5),
data.getDouble(6),
data.getDouble(7)
));
if (data.isLast()) {
setMovies(favouriteMovies);
hideLoadingProgress();
mAdapter.notifyDataSetChanged();
}
}
} else {
showEmptyView(EMPTY_VIEW_TYPE_LOCAL);
hideLoadingProgress();
}
}