我正在构建一个杂志电子阅读器应用程序,使用 viewpager 作为主要导航元素。文章对象被反序列化(来自从 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),因为这样做会跳过数组中的一篇文章(位于广告展示位置的文章)。因此,我创建了一个int adsShown
,每次显示广告时都会递增,然后调用final Article s = toShow.get(position - adsShown)
. 但是当我这样做时,如果用户通过 viewpager 向后翻转,则会显示 ArrayIndexOutOfBounds 错误,因为它的 position-adsshown 为 -1。
我知道我可以找到解决这些问题的方法,但我怀疑是否有更简单的方法来处理这个任务。
有任何想法吗?