在将数据加载到SQLite数据库时显示进度指示器的策略?

时间:2013-06-07 17:25:19

标签: android android-contentprovider android-listfragment

我的应用包含以下组件:

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

    //...
}

1 个答案:

答案 0 :(得分:0)

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