在ViewHolder的带监听器的视图中,如何修改它代表的数据?

时间:2015-04-07 18:00:37

标签: android android-viewholder

我有一个ViewHolder,除了其他小部件之外,还包含一个SeekBar。 SeekBar有一个Listener,在onCreateViewHolder调用期间添加。

由于onBindViewHolder方法用于配置ViewHolder持有的视图,因此该监听器如何对ViewHolder视图所代表的新数据集进行操作?

是否可以将类型为Object的成员变量添加到ViewHolder中,该变量包含对数据集的引用,以便侦听器可以在SeekBar更改期间获取此对象并修改数据集中的变量?或者这是一种反模式?

该成员变量引用的数据集对象将在每个onBindViewHolder上换出,以“指向”当前表示的数据集。

1 个答案:

答案 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}}