【发布时间】:2016-10-13 13:50:00
【问题描述】:
我正在使用 RecyclerView.Adapter 来显示多个携带不同消息的 ViewHolder。这是 onBindViewHolder 函数:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.messageTextView.setText("Updated message");
}
});
}
发生的奇怪事情是,如果我在第一个 ViewHolder 上按下 submitButton,则消息在其上显示为“更新消息”,但是当我向下滚动到其他 ViewHolder 时,第五个 ViewHolder 也包含“更新消息” 9号、13号等已经有消息显示在上面。同样,如果我按下第二个 ViewHolder 上的提交按钮,消息也会显示在第二个、第六个、第十个、第十四个等等。
理想情况下,如果我按下第一个 ViewHolder 上的提交按钮,则该消息应该只显示在第一个 ViewHolder 上,而不显示在其他 ViewHolder 上。
我必须将参数 ViewHolder holder 设置为 final 以便我可以在 onClick 函数的内部类中调用它。
我不知道为什么会发生这种情况,而且我以前从未使用过 onBindViewHolder 函数,但我觉得这与 ViewHolder holder "final" 的论点有关。
【问题讨论】:
标签: java android android-studio android-recyclerview