Я извлекаю канал подкаста из БД и отображаю его в RecyclerView с помощью LoaderManager.LoaderCallbacks. В моем контент-провайдере:
- Я регистрирую «Наблюдатель» в методе запроса () преобразователя содержимого с помощью:
cursor.setNotificationUri(getContext().getContentResolver(), uri);
- Когда я обновляю/вставляю/удаляю в преобразователе контента, я уведомляю Observer с помощью:
getContext().getContentResolver().notifyChange(uri, null);
, поэтомуonLoaderReset()
запускается при необходимости
Затем у меня есть служба с DownloadManager, которая каждую секунду обновляет ход моих текущих загрузок в базу данных. Загрузчик постоянно загружает данные из БД, и я вижу изменение хода каждого эпизода загрузки в пользовательском интерфейсе.
Я думаю, что это неправильный подход к уведомлению об изменении и очень медленный, но я не могу сейчас придумать лучшего решения. Не могли бы вы предложить какое-либо эффективное решение с 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();
}
...
}
setHasStableIds(true)
из-за ограничения: Невозможно изменить, имеет ли этот адаптер стабильные идентификаторы, пока в адаптере зарегистрированы наблюдатели.. Идентификаторы не меняются, но связанные данные меняются, поэтому это невозможно. Но спасибо за ваш совет. 27.01.2016getItemId(int position)
... теперь работает, но все равно тихо вяло (из-за переключения курсора). 27.01.2016