1

私はAndroidにかなり慣れていないため、次のことを達成するための正しい/最良の方法を見つけるのが難しいと感じています:

ActionBarSherlock を使用して、それぞれがフラグメントをロードする一連のタブを作成しています。これらの 1 つは ListFragment (実際には SherlockListFragment) です。新しいスレッドを使用してリストをロードすることから始めましたが、リストがロードされる前に別のタブに切り替えるまで、すべて問題ないように見えました。次に、フラグメントがアクティブではないと推測するため、 SetListShown(true) で失敗します。

public override void OnActivityCreated(Bundle savedInstanceState)
{
    base.OnActivityCreated(savedInstanceState);

    SetListShown(false);

    var listView = (ListView) Activity.FindViewById(Android.Resource.Id.List);

    Button loadMore = new Button(Activity);
    loadMore.SetText("Load more articles", TextView.BufferType.Normal);
    loadMore.Click += LoadMoreArticles;
    listView.AddFooterView(loadMore);

    ThreadPool.QueueUserWorkItem((obj) => {

        var articles = _articleService.GetArticles(0, 10, DateTime.UtcNow);
        _items = articles.Select(x => new ArticleSummaryModel(x)).ToList();

        Activity.RunOnUiThread(() => {

            _adapter = new ArticleList_Adapter(Activity, _items);
            ListAdapter = _adapter;

            SetListShown(true);
        });
    });
}

私がやりたいのは、タブが初めて開かれたときにデータの読み込みを開始し、標準の進行状況インジケーターを表示してから、リストが表示され、進行状況インジケーターが削除されることです。データの読み込み中にタブが変更された場合、そのタブが再び開かれたときに表示されるはずです。

私が見逃していたこれを達成する簡単な方法があれば、素晴らしいです! Androidではそれは不可能です。私もそれを知りたいので、試すのをやめることができます;-)

AsyncTask、AsyncTaskLoader、IntentService などについて多くのことを読みましたが、何を使用する必要があるのか​​ まったく明確ではなく、これらのいずれかが実際に私が望むものを達成するでしょう!

参考までに、私はAndroid用のモノとv2.3+​​をサポートする互換パックを使用していますが、Javaの例などを翻訳できることを願っています.

よろしくお願いします!ロビン

4

1 に答える 1

0

これがモノドロイドでどのように機能するかはわかりませんが、ほぼ同じになるはずです。AsyncTaskLoader は、LoaderManager を介してアクティビティのライフサイクルに関連付けられているため、使用してください。フラグメントに LoaderCallbacks インターフェースを実装させ、loaderManager.init(...)そこのどこか (たとえばonActivityCreated) で呼び出す必要があります。ローダー タスクが完了するonLoadFinishedと、データが通知され、アダプターにロードしてプログレスバーとリストビューの遷移を行うことができます。AsyncTaskLoader の実装方法の例は、こちらのドキュメント ページ、またはもう少し詳細なこちらのページにあります。トランジションに関しては、このようなものを使用して、アプリに磨きをかけます。

于 2013-02-22T17:16:36.797 に答える