【问题标题】:Strategy for displaying a progress indicator while loading data into an SQLite database?在将数据加载到 SQLite 数据库时显示进度指示器的策略?
【发布时间】:2013-06-08 02:13:20
【问题描述】:

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

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

    //...
}

【问题讨论】:

    标签: android android-contentprovider android-listfragment


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多