Android 交替显示在ViewPager中的视图类型

Android 交替显示在ViewPager中的视图类型,android,Android,我正在构建一个杂志电子阅读器应用程序,使用viewpager作为主要导航元素。文章对象被反序列化(从REST web服务接收的数据),并用于膨胀“封面”,由用户“翻转”的寻呼机适配器膨胀 使用PagerAdapter和实例化Item方法(将项目的ArrayList传递给适配器的构造函数),这一切都可以完美地工作: 我的问题是,在每第6个位置,我都想放大一个不同的视图来显示一个广告。目前,我在这个方法的顶部添加了一个if语句,如: if ((position != 0) && (p

我正在构建一个杂志电子阅读器应用程序,使用viewpager作为主要导航元素。文章对象被反序列化(从REST web服务接收的数据),并用于膨胀“封面”,由用户“翻转”的寻呼机适配器膨胀

使用PagerAdapter和实例化Item方法(将项目的ArrayList传递给适配器的构造函数),这一切都可以完美地工作:

我的问题是,在每第6个位置,我都想放大一个不同的视图来显示一个广告。目前,我在这个方法的顶部添加了一个if语句,如:

if ((position != 0) && (position%6 == 0)){
之后,我将另一个视图充气,并在其上放置适当的广告。然而,这导致了许多复杂问题:在下一个视图中,我不能再说toShow.get(position),因为这样做会跳过数组中的一篇文章(广告显示位置处的文章)。因此,我创建了一个
intadsshow
,它在每次显示广告时都会递增,并调用
final Article s=toShow.get(position-adsshow)
。但是当我这样做的时候,如果用户通过viewpager返回,就会显示ArrayIndexOutOfBounds错误,因为它显示的位置是-1

我知道我可以找到解决这些问题的方法,但我怀疑是否有更简单的方法来处理这项任务


有什么想法吗?

您可以使用以下方法获得正确的位置:

// check if position > 0 to make sure we don't start with an ad
if(position > 0 && position%6 == 0) {
  // get ad view here
else {
  int index = position - (int)Math.floor(position/6);
  final Article s = toShow.get(index);
  ...
}
还要记住,你的
getCount
必须返回文章数加上广告数,否则它不会显示你数组中的所有文章

// check if position > 0 to make sure we don't start with an ad
if(position > 0 && position%6 == 0) {
  // get ad view here
else {
  int index = position - (int)Math.floor(position/6);
  final Article s = toShow.get(index);
  ...
}