我的应用由以下组件组成:
- 存储在 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);
}
//...
}