getItemViewType причина, чтобы ItemTouchHelper не работал должным образом - PullRequest
0 голосов
/ 04 февраля 2020

Я использую класс ItemTouchHelper для реализации перемещения элементов RecyclerView, размер моего Списка равен 22, поэтому при прокрутке состояние элементов, такое как BackgroundColor, показывает одинаковые каждые 10 элементов (я так думаю).
, поэтому после переопределения проблема getItemViewType решена, но есть другая проблема, когда я перемещаю элемент, он прыгает только на одну позицию, и мне приходится перемещать его снова на одну позицию
Я понимаю, что проблема переопределяет getItemViewType

сейчас Я не знаю, что делать, чтобы решить эту проблему
кто-нибудь может помочь?

переопределенный метод:

@Override
public int getItemViewType(int position) {
    return position;
}

------------- - ОБНОВЛЕНИЕ --------------

public class SearchFiltersAdapter extends RecyclerView.Adapter<SearchFiltersAdapter.SearchFilterViewHolder> {
    private List<ContentDatabases> dbList;

    public SearchFiltersAdapter(List<ContentDatabases> dbList) {
        this.dbList = dbList;
    }

    @NonNull
    @Override
    public SearchFilterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_search_filters_adapter, parent, false);
        return new SearchFilterViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull SearchFilterViewHolder holder, int position) {
        ContentDatabases currentDb = dbList.get(holder.getAdapterPosition());
        holder.bind.dbTitle.setText(dbList.get(holder.getAdapterPosition()).dbTitle);

        if (currentDb.isSelected) {
            ViewManipulateHelper.setCardSelected(holder.bind.getRoot(), holder.bind.dbTitle);
        }
    }

    @Override
    public int getItemCount() {
        return dbList.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    static class SearchFilterViewHolder extends RecyclerView.ViewHolder {
        RowSearchFiltersAdapterBinding bind;

        SearchFilterViewHolder(@NonNull View itemView) {
            super(itemView);
            bind = RowSearchFiltersAdapterBinding.bind(itemView);
        }
    }
}

--------------- ОБНОВЛЕНИЕ --------- ------
к сожалению, я не могу найти никакого решения для этой проблемы, поэтому в классе Adapter и методе onBindViewHolder я просто вызываю holder.setIsRecyclable(false);, чтобы не перерабатывать элементы.
, если кто-то найдет решение или объяснение ПОЖАЛУЙСТА, дайте мне знать, спасибо.

...