0

私は、boolean変数でhasMoreData何が起こっているのかをEndlessAdapter追跡しようとしていますfalse.

何が起こるかを最初から実行してみましょう。 注:私はとを使用していtaskますsetRunInBackground(false);

リストの設定とアダプターの設定から始めます。

profileList = new ArrayList<ProfileReview>();
endlessAdapter = new EndlessProfileAdapter(getActivity(), profileList);
endlessAdapter.setRunInBackground(false);
listView.setAdapter(endlessAdapter);

補足:これが正しいかどうかはわかりませんが、空のアダプターでリストを設定しているようです。

アダプターが設定された後に最初に発生するように見えるのはメソッドです。ここでcacheInBackground()私のprofileListサイズはゼロです。一方、この (キャッシュ) メソッドでは、 を 返します。 なぜかわからない?リストのサイズがゼロだから?それとも、まだデフォルト値に関連付けられているためですか?int startPointAsyncTaskhasMoreDatatruehasMoreDatatruetrue

タスクでは、最初の 10 項目を取得します。

次に、ユーザーがスクロールすると、thobber回転が始まります。そして次の10件が表示されます。 現在は 10 であり、したがって偽であるとLog.d教えてくれます。profileList.size()hasMoreData

public void onItemsReady(ArrayList<ProfileReview> data) {
     profileList.addAll(data);
     endlessAdapter.onDataReady();
     hasMoreData = profileList.isEmpty();  \\ Log.'d this out
}

私の質問:私のリストは 10 個の項目で始まり、ユーザーがスクロールすると、さらに 10 個の項目が表示されます。その後、合計 20 個のアイテムの後 (またはhasMoreData == false.) で停止しますが、プルするアイテムは他にもたくさんあります。保管方法はhasMoreData == true?そのきっかけは何ですか?明らかに、トリガーはリストサイズです (私は思いますか?)。データの取得を開始すると、リストサイズが 0 になるのはなぜですか? (コース終了まで)

4

1 に答える 1

2

これが正しいかどうかはわかりませんが、空のアダプターでリストを設定しているようです。

EndlessAdapter空でないアダプタから開始するように設計されています。実際、より多くのデータをロードするには、ユーザーがスクロールする必要があることを想定して設計されています。現在のアプローチでの動作は指定されていないため、そのアプローチはお勧めしません。いくつかのデータをロードし、データの最初のバッチの準備ができたらリストに入力してください。

一方、この (キャッシュ) メソッドでは、hasMoreData は true を返します。なぜかわからない?リストのサイズがゼロだから?それとも、まだデフォルト値の true に関連付けられているためですか?

EndlessAdapterメソッドがないのでhasMoreDataソース コードをEndlessAdapter検索しても、hasMoreData. 一体、「もっと」という言葉が現れる唯一の場所はコメントです。

サンプルアプリにはhasMoreData価値があります。このサンプル アプリを使用していないため、独自のコードでランダム クラスのランダム データ メンバーを使用することはできません。

サンプル アプリではEndlessAdapterCustomTaskFragment、 という名前のデータ メンバーを使用しますhasMoreData。これは、booleanから返されるように設計された値cacheInBackground()です。の責任は、cacheInBackground()データtrueのロードを続行する必要がある場合 (現在のバッチがロードされた後)、falseそうでない場合は返すことです。このサンプル アプリの場合、hasMoreDataへの呼び出しによってデータが取り込まれ、データの読み込みをシミュレートすることonItemsReady()によってそれ自体がトリガーされます。コレクションが空かどうかに応じてまたはに設定されるため、基本的には追加データを 1 回ロードしてから終了します。onPostExecute()AsyncTaskhasMoreDatatruefalseitems

しかし、それはサンプルアプリの動作です。このクラスのほとんどは私が書いたものではありません。これは、独自のデータ取得タスクのサポートを追加するパッチとして提供されました。サンプル コードをサンプル以上のものと見なさないでください

したがって、使用することに決めた役割をアプリケーション ロジックが提供できるように値を適切な値に設定する必要があります。サンプルと同じ役割をコード内で持っている場合は、データが不足していると判断するまでそのままにしてから、それを設定します。 hasMoreDatahasMoreData hasMoreDatatruefalse

于 2013-04-23T20:05:29.080 に答える