ViewPager
雑誌の電子書籍リーダー アプリで記事を表示するためにを使用しています。アプリが初期化されると、Web サービスから 10 個の記事を取得し、それらを使用して 10 個のビューをインフレートし、PagerAdapter
. ユーザーが 6 番目のビューに到達したとき (記事配列のサイズから現在の位置を引いたサイズが 4 未満のとき)、さらに 10 個の記事を読み込み、それらを PagerAdapter のビューの最後に追加して、ユーザーが10回目の記事、次の10回はすでにロードされています。これは、次のコードで正常に機能しているようです。
@Override
public Object instantiateItem(View arg0, int position) {
final Article a = toShow.get(position);
View v = makeView(a);
((ViewPager) arg0).addView(v);
outer: if (toShow.size() - position < 4 && noMore == false){
ArrayList<Article> toAdd = new ArrayList<Article>();
int idx = toShow.size()-1;
try {
toAdd = new getPosts(idx).execute().get();
} catch (InterruptedException e) {e.printStackTrace();
} catch (ExecutionException e) {e.printStackTrace();}
idx++;
if (toAdd.isEmpty()){
noMore = true;
break outer;
}
else {
for (int curr = 0; curr < toAdd.size(); curr++){
toShow.add(idx, toAdd.get(curr));
}
this.notifyDataSetChanged();
System.out.println("added more");
}
}
return v;
}
ただし、データセットが変更されると (つまり、新しい記事の読み込みが終了して に追加されるとPagerAdapter
)、ViewPager
は最初のビューの表示に戻ります。現在表示されているビューを変更せずに新しい記事をロードできるように、ここでアプローチを変更するにはどうすればよいですか?