Мое приложение состоит из следующих компонентов:
- поставщик контента для данных, хранящихся в базе данных SQLite
ListFragment
, который используетCursorAdapter
для отображения данных от поставщика контента- служба, работающая в фоновом режиме, периодически опрашивающая удаленный URI на наличие новых данных и добавляющая их в базу данных через контент-провайдера.
Вот вызов. Когда ListFragment
отображается впервые, база данных пуста. Я использую LoaderManager
/CursorLoader
для получения данных от провайдера, а ListFragment
отображает индикатор выполнения. Проблема в том, что это всегда будет приводить к пустой таблице, так как служба еще не успела опросить удаленный URI.
Пользователь наблюдает примерно следующее:
ListFragment
отображает индикатор выполнения- индикатор прогресса исчезает и отображается пустой список
- примерно через 3 или 4 секунды служба завершает обновление данных, и они отображаются
Это не интуитивно понятно. Я хотел бы, чтобы индикатор выполнения отображался во время загрузки данных.
Вот обзор того, что у меня есть прямо сейчас.
public class ArticleListFragment extends ListFragment
implements LoaderManager.LoaderCallbacks<Cursor> {
//...
@Override
public void onActivityCreated(Bundle savedInstanceState) {
//...
mAdapter = new SimpleCursorAdapter(...);
setListAdapter(mAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(...);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
setListShown(true);
}
//...
}