1

我的应用由以下组件组成:

  • 存储在 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);
    }

    //...
}
4

1 回答 1

0

使用 ContentObserver 技术并在数据更改时加载游标。因此,您可以在需要时隐藏进度,例如当 Cursor.getCount() > 0 时。

于 2013-06-07T18:13:20.253 回答