2 список с использованием метода getItemcount в режиме рециркуляции при показе рекламы? - PullRequest
0 голосов
/ 28 мая 2019

Я хочу показывать объявления в представлении Recycler, но у меня есть два списка, и я получаю ошибку, когда использую список 2; У меня есть ** List serverList ** и ** List recycleItems **, и я хочу показывать объявления, но не могу получить представление при использовании метода getItemCount () для представления переработчика.

java.lang.IndexOutOfBoundsException: недопустимый индекс 0, размер равен 0 в java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:255) на 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 голосов
/ 28 мая 2019

Нельзя использовать вид рециркулятора с двумя списками, это неверно.Вы можете сделать интерфейс 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...