【发布时间】:2016-01-27 12:56:51
【问题描述】:
我正在从数据库中获取播客提要并使用 LoaderManager.LoaderCallbacks 在 RecyclerView 中显示它。在我的内容提供者中:
- 我在内容解析器 query() 方法中注册了一个“观察者”:
cursor.setNotificationUri(getContext().getContentResolver(), uri); - 当我在内容解析器中更新/插入/删除时,我会通知 Observer:
getContext().getContentResolver().notifyChange(uri, null);所以onLoaderReset()会在需要时触发
然后我有一个带有 DownloadManager 的服务,它每秒更新我正在进行的下载到数据库的进度。加载器不断从数据库中加载数据,我可以在 UI 中看到每个下载片段的变化进度。
我认为,这是一种错误的通知更改方法,而且速度非常慢,但我现在想不出更好的解决方案。您能否建议任何使用 RecyclerView 和下载进度的有效解决方案?
我使用 RecyclerView 的自定义活动
public class MyActivity
implements LoaderManager.LoaderCallbacks<Cursor> {
private RecyclerView mRecyclerView;
private MyCustomRecyclerViewAdapter mAdapter;
...
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this,
myDataUri, null, null, null, null
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
...
}
我的自定义适配器
public class MyCustomRecyclerViewAdapter
extends RecyclerView.Adapter<EpisodeAdapter.AudioAdapterViewHolder> {
...
public void swapCursor(Cursor newCursor) {
mCursor = newCursor;
notifyDataSetChanged();
}
...
}
【问题讨论】:
标签: java android android-recyclerview