2列出带有回收者视图的getItemcount方法,同时显示广告?

时间:2019-05-28 19:06:43

标签: android android-recyclerview recycler-adapter

我想在“回收站”视图中展示广告,但是我有两个列表,使用2个列表时出现错误; 我有**列出serverList **和**列出recycleItems **,我想展示广告,但是当我使用回收站视图的getItemCount()方法时却无法获取该视图。

java.lang.IndexOutOfBoundsException:无效的索引0,在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)的大小为0         在java.util.ArrayList.get(ArrayList.java:308)         在com.mydata.adapter.ServerAdpter.onBindViewHolder(ServerAdpter.java:123)

public int getItemCount() {
    Log.e("Serv+re", String.valueOf(recycleItems.size() + serverList.size()));
    return recycleItems.size() + serverList.size();
}


public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    int viewType = getItemViewType(position);

    switch (viewType) {
        case ITEM_data:
            Server server = serverList.get(position);
            ServerViewHolder v = (ServerViewHolder) holder;

            v.bind(position, listener);

        case ITEM_BANNER_AD:

        default:
            AdViewHolder bannerHolder = (AdViewHolder) holder;
            AdView adView = (AdView) recycleItems.get(position); //show error in this line
            ViewGroup adCardView = (ViewGroup) bannerHolder.itemView;
            if (adCardView.getChildCount() > 0) {
                adCardView.removeAllViews();
            }
            if (adView.getParent() != null) {
                ((ViewGroup) adView.getParent()).removeView(adView);
            }
            adCardView.addView(adView);

    }


}

1 个答案:

答案 0 :(得分:0)

您不能将回收站视图与两个列表一起使用,这是不正确的。 您可以使DisplayItem接口(例如)将所有项存储在一个列表中,并在您的类中实现此接口。

public interface DisplayItem

public class Ad implements DisplayItem {

   // Ad properties

}

public class Info implements DisplayItem {

   // Info properties

}


class YourAdapter extends RecyclerView.Adapter {

   private List<DisplayItem> items;

   // Your adapter code
}

您将使用此列表单独在适配器中工作。 在onBindViewHolder方法中,您会将DisplayItem强制转换为所需的viewHolder类