ViewPagerのCustomPagerAdapterで、instantiateItem()メソッドでTextViewを作成しようとしています。次に、特定の条件に応じて、ページごとに異なるテキストを設定します。テキストはページカーソルから読み取られます。コードは次のとおりです。
@Override
public Object instantiateItem(ViewGroup collection, int position) {
sc = new ScrollView(context);
sc.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
sc.setFillViewport(true);
tv = new TextView(context);
if(position < count) {
tv.setText(pages.getString(1));
pages.moveToPosition(position);
}else {
tv.setText("LOCKED");
}
tv.setTag(TAG_PAGE + position);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(Color.BLACK);
tv.setTextSize(30);
sc.addView(tv);
((ViewPager) collection).addView(sc);
return sc;
}
ただし、ViewPagerは期待どおりに動作しません。1ページ目と2ページ目は同じテキストで、残りのページには予想どおり「LOCKED」の記号が付いています。4ページ目にスワイプして最初のページに戻ると、最初のページは2番目のページにあると思われるテキストで構成されています。myViewPager.setOffscreenPageLimit(numberOfPages)も使用しようとしましたが、役に立ちません。
私はこの答えを見つけました:
「instantiateItem内では、positionパラメーターはレンダリングが必要な位置です。ユーザーに表示される現在フォーカスされているアイテムの位置ではありません。現在表示されているビューの左右のページは事前に設定する必要があります。これらの画面へのアニメーションがスムーズになるように、メモリにレンダリングされます。」
それは私には理にかなっていますが、ページのコンテンツを正しく表示し、必要に応じて更新するにはどうすればよいですか?問題に混乱と混乱をもたらすinstantiateItem()メソッドをスキップしてそれを行う別の方法があるかどうかアドバイスしてください。ありがとうございました。