我有一个ViewHolder,除了其他小部件之外,还包含一个SeekBar。 SeekBar有一个Listener,在onCreateViewHolder
调用期间添加。
由于onBindViewHolder
方法用于配置ViewHolder持有的视图,因此该监听器如何对ViewHolder视图所代表的新数据集进行操作?
是否可以将类型为Object的成员变量添加到ViewHolder中,该变量包含对数据集的引用,以便侦听器可以在SeekBar更改期间获取此对象并修改数据集中的变量?或者这是一种反模式?
该成员变量引用的数据集对象将在每个onBindViewHolder
上换出,以“指向”当前表示的数据集。
答案 0 :(得分:1)
如果你使用RecyclerView.ViewHolder
,那么你就会明白,通常的ViewHolder模式的getView()
方法会被2种方法替换为onCreateViewHolder()
和onBindViewHolder()
。方法onCreateViewHolder()
代表创建VH或从标记获取VH,onBindViewHolder()
代表用相应数据填充VH的视图。理解这一点,你设置听众的唯一地方是onBindViewHolder()
方法
如果您的问题是关于Listener
每次onBindViewHolder()
点火时创建View
- 这不是一个好主意。您最好创建一个侦听器实例作为(适配器)类字段并使用它。通常我会将某些内容设置为目标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);
}
};
使用标签:
{{1}}