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