0

我正在尝试在 recycleview 中展示广告,并且我使用下面的代码成功地做到了。问题是,在每个“MspaceBetweenAds”位置,广告都会出现,但是这里的文章被我试图修复的广告所取代通过 Mposts.Count + (Mposts.count% MspaceBetweenAds) 修改 ItemCount() 但我收到“IndexOutOfBounds”错误任何帮助..这是我的代码

public class AdsView : ListViewHolder
        {
            public AdView mAdView { get; private set; }
            public AdsView(View view) : base(view)
            {
               mAdView = view.FindViewById<AdView>(Resource.Id.AdsCard);
            }
        }

 public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            RecyclerView.ViewHolder vh = null;
            switch (viewType)
            {
                case 1:
                    View vBig = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.BigCard, parent, false);
                    vh = new MyView(vBig);
                    break;
                case 2:                  
                    View vAds = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.AdsCard, parent, false);
                    vh = new AdsView(vAds);
                    break;
            }
            return vh;
        } 
 public override void OnBindListViewHolder(ListViewHolder holder, int position)
        {
            var MyHolder = holder as MyView;
            switch (holder.ItemViewType)
            {
                case 1:
                    // code to show posts articles here
                    break;
                case 2:                 
                    var AdHolder = holder as AdsView;
                    fnc.AddBannerAd(AdHolder.mAdView);
                    break;
            }
        }
public override int GetItemViewType(int position)
        {
            if (position > 0 && position % mSpaceBetweenAds  == 0) { return 2; }
            else { return 1; }
        }

这是一个演示应用程序https://drive.google.com/open?id=1Tk3G8dw9nqIffxmEFNGqIgXNzCJJPxD_

4

1 回答 1

0

由于您发布的演示包含 3rd 方包,我无法直接运行它并为您修改演示。流动是我对您的问题的解决方案:

错误原因: 你做的方式(修改ItemCount() by Mposts.Count + (Mposts.count% MspaceBetweenAds)并不能改变Mposts的实际长度,结果导致“IndexOutOfBounds”错误。

解决方案 如果要在recylerview中插入ads,不仅需要修改adapter让item和ads同时显示,还需要修改layout资源文件,即需要将ads数据插入到数据列表中你的recyclerview。或者您可以简单地将重复的项目添加到每个 [MspaceBetweenAds] 项目的列表中。

于 2018-10-25T11:49:10.820 回答