在一个带有Listener的ViewHolder的View中,如何修改它代表的数据呢?

In a ViewHolder's View with a Listener, how to modify the data it represents?

我有一个 ViewHolder,其中包含一个 SeekBar。 SeekBar 有一个监听器,它是在 onCreateViewHolder 调用期间添加的。

由于 onBindViewHolder 方法用于配置 ViewHolder 持有的 View,那么 Listener 如何对 ViewHolder 的 View 表示的新数据集进行操作?

是否可以向ViewHolder 添加一个Object 类型的成员变量,其中包含对数据集的引用,以便Listener 可以在SeekBar 更改期间获取此对象并修改数据集中的变量?或者这是一个反模式?

然后,该成员变量引用的数据集对象将在每个 onBindViewHolder 上换出,以便 "point" 到当前表示的数据集。

如果您使用的是 RecyclerView.ViewHolder,那么您确实了解通常的 ViewHolder 模式的 getView() 方法在这里被 2 种方法取代:onCreateViewHolder()onBindViewHolder()。方法onCreateViewHolder()代表创建VH或从标签中获取,onBindViewHolder()代表用相应的数据填充VH的视图。理解这一点,你应该设置监听器的唯一地方是 onBindViewHolder() 方法。
如果您的问题是关于每次触发 onBindViewHolder() 时创建一个 Listener - 这不是一个好主意。您最好创建一个侦听器实例作为 (adapter) class 字段并使用它。通常我会为目标 View 的标签设置一些东西,而这个 "something" 是我在监听器中需要的对象。

private final View.OnClickListener onCancelClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final SwipeLayout swipeLayout = (SwipeLayout) v.getParent().getParent();
        swipeLayout.close();
    }
};

getView()onBindViewHolder() 的边:

viewHolder.btnSwipeMenuCancel.setTag(swipeLayout);
viewHolder.btnSwipeMenuCancel.setOnClickListener(onCancelClick);

使用标签:

viewHolder.btnSwipeMenuReply.setTag(message);
viewHolder.btnSwipeMenuReply.setOnClickListener(onReplyToAuthorClick);

private final View.OnClickListener onReplyToAuthorClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final Message message = (Message) v.getTag();
        activity.replyToMessageAuthor(message);
    }
};