getItemViewType导致ItemTouchHelper无法正常工作

时间:2020-02-04 15:29:46

标签: java android android-recyclerview drag-and-drop

我正在使用ItemTouchHelper类在RecyclerView Items上实现移动, 我的List的大小为22,所以在滚动时,每隔10个项目(例如我认为)都会显示相同的状态(例如BackgroundColor)。
因此,在解决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);以不回收项目。
如果有人找到解决方案或对此问题的解释,请告诉我,谢谢。

0 个答案:

没有答案