RecyclerView
просто показывает виды, которые вы создаете на onCreateViewHolder
.
В зависимости от вашей позиции вам нужно будет создавать разные виды. Это означает, что вы создадите HeaderViewHolder
, когда позиция соответствует заголовку, и ItemViewHolder
, когда позиция соответствует элементу.
Так что вам придется рефакторинг вашего ColorRecyclerViewAdapter
до:
private static final int HEADER_VIEW = 0;
private static final int ITEM_VIEW = 1;
@Override
public RecyclerView.ViewHolderSelector onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_VIEW) {
...
return new ItemViewHolderSelector(view);
} else {
...
return new HeaderViewHolderSelector(view);
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
if (ITEM_VIEW == holder.getItemViewType()) {
...
} else {
...
}
}
@Override
public int getItemCount() {
return itemsCount + headersCount;
}
Внутри onBindViewHolder
вы должны разрешить перетаскивание элемента, только установив TouchListener.
Кроме того, внутри методов onMove
и и onSwiped
вы должны использовать позицию, чтобы узнать, является ли это заголовок или элемент и разрешить или нет выполнение:
@Override
public void onItemDismiss(int position) {
if (isItemPosition(position)) {
...
}
}
@Override
public boolean onItemMove(final int fromPosition, final int toPosition) {
if (isItemPosition(position)) {
...
}
}
isItemPosition()
- это метод, который вам нужно написать, который зависит от того, как адаптер хранит данные элементов и заголовков.