Простая логика - это добавление значения черного для среднего столбца.
1) Как найти средний столбец для GridLayoutManger, где номер столбца равен 5.
if (position % 5 == 2) {...}
условие верно для вашего среднего столбца.
2) Используйте getItemViewType
для идентификации добавления пустого вида или Исходного вида
@Override
public int getItemViewType(int position) {
return position % 5 == 2 ? 1 : 0;
}
3) Нет необходимости добавлять черный вид в последнюю строку, поэтому измените логику
// 0= Original view 1= Blank View
@Override
public int getItemViewType(int position) {
if((getItemCount()-(position-1))<5)
return 0;
else
return position % 5 == 2 ? 1 : 0;
}
4) Использовать ViewType в onCreateViewHolder
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (viewType == 1)
return new ViewHolderBlank(inflater.inflate(R.layout.item_blank, parent, false));
else
return new ViewHolderOriginal(inflater.inflate(R.layout.item_add_orignal, parent, false));
}
5) Проверьте тип viewHolder в onBindViewHolder
и выполните логику
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderBlank) {
} else if (holder instanceof ViewHolderOriginal) {
}
}
6) Добавить лишний элемент, который мы удалили, как пустой вид
@Override
public int getItemCount() {
return totalItemList.size()+(totalItemList.size()/5);
}
вы должны управлять черной записью при попытке доступа к totalItemList.get (position), иначе это вызывает исключение
1028 Мощн * *
![enter image description here](https://i.stack.imgur.com/EDFWR.png)