listView があり、このリストビューのデータの新しい「ページ」のように 10 秒ごとに表示しようとしています。
そのために、5 項目ごとにデータのリストに一種のフィルターを使用します。
List<List<CustomObject>> pages = new ArrayList<List<CustomObject>>();
for (int i = 0; i < listToFilter.size(); i += 5) {
if ((i + 5) <= listToFilter.size()) {
// create a group of 5 custom objects
List<CustomObject> group = listToFilter.subList(i, i + 5);
pages.add(new ArrayList<CustomObject>(group));
} else {
// add the remaindering custom objects in an other list
int remainder = listToFilter.size() - i;
List<CustomObject> group = listToFilter.subList(i, i + remainder);
pages.add(new ArrayList<CustomObject>(group));
}
}
このコードの最後に、最大サイズが 5 のさまざまなリストを含むリスト「ページ」があります。たとえば、次のようになります。
pages = {java.util.ArrayList@831696467904} size = 2 // page list
[0] = {java.util.ArrayList@831698108576} size = 5 // page1
[1] = {java.util.ArrayList@831698106184} size = 2 // page2
ここでの私の目標は、これらのページを繰り返し処理して、10 秒ごとに新しいページを表示することです。listView とアダプターを使用してページを閲覧する本のように。
アダプターを 10 秒ごとに呼び出し、データを交換してインターフェイスを更新するタイマーがあります。
... // My filter job
this.notifyDataSetChanged();
clear();
addAll(pageData);
現時点ではすべてが機能していますが、この仕事をするために毎回新しいリストを再作成する必要があります。
毎回新しいリストを再作成するこの複雑なカスタム フィルターを使用する代わりに、"listToFilter" でフィルター (私は Java8 を使用していません) を使用するだけの解決策があるかどうかを知りたいです。
編集:
グアバでRangeを使用してこれを管理する方法を見つけました。リストで参照するアイテムの範囲を定義できます。しかし、現時点では、それをどのように使用し、カスタム オブジェクトを使用して範囲リストを反復処理するかはまだわかりません。