ビューページャーを主要なナビゲーション要素として使用して、雑誌の電子リーダー アプリを構築しています。記事オブジェクトは (REST Web サービスから受信したデータから) デシリアライズされ、ページャー アダプターによって膨張される「カバー ページ」を膨張させるために使用され、ユーザーはそれを「めくります」。
これはすべて、PagerAdapter を次のような instantiateItem メソッド (アダプターのコンストラクターに渡された記事の ArrayList を使用) と使用して完全に機能します。
@Override
public Object instantiateItem(View arg0, int position) {
final Article s = toShow.get(position);
View v = getLayoutInflater().inflate(R.layout.previewpage, null);
TextView hl = (TextView)v.findViewById(R.id.coverHl);
ImageView img = (ImageView)v.findViewById(R.id.coverImg);
....
hl.setText(s.title);
img.setImageBitmap(s.image);
私の問題は、6 番目の位置ごとに、別のビューを膨らませて広告を表示したいということです。現時点では、次のようにこのメソッドの先頭に if ステートメントを追加しています。
if ((position != 0) && (position%6 == 0)){
その後、もう一方のビューを膨らませて、適切な広告を配置します。ただし、これは多くの複雑さをもたらします。次のビューでは、toShow.get(position) と言うことができなくなりました。配列内の記事の 1 つ (広告が表示された位置にある記事) をスキップするからです。そこで、int adsShown
広告が表示されるたびにインクリメントされる を作成し、 を呼び出しますfinal Article s = toShow.get(position - adsShown)
。しかし、私がそうすると、ユーザーがビューページャーをめくると、position-adsshown が -1 であるため、ArrayIndexOutOfBounds エラーが表示されます。
これらの問題の回避策を見つけられることはわかっていますが、そもそもこのタスクを処理するためのより簡単な方法があるかどうか疑問に思っています.
何か案は?