根据数据更改 Recycler View 项目
Posted
技术标签:
【中文标题】根据数据更改 Recycler View 项目【英文标题】:Changing Recycler View item based on its data 【发布时间】:2021-10-12 04:25:02 【问题描述】:所以我有一个带有问题的 POJO,我想在我的回收站中显示一个带有答案的问题本身,正确的答案应该有背景颜色。
当我尝试添加背景颜色时,项目会根据一些严肃的魔法来着色。
前几件物品没有任何颜色,靠近回收器底部的地方会发生这种情况。
enter image description here
越远越好,当我从底部滚动到顶部时,顶部的项目也会获得颜色。
public void bind(Question question)
int correctAnswerNumber = question.getCorrectAnswer();
switch (correctAnswerNumber)
case 1:
answer1.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 2:
answer2.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 3:
answer3.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 4:
answer4.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
这里的上下文是从活动中传递过来的,我必须想好要做什么。 我尝试将逻辑移除到构造函数,更改上下文,通过持有者寻址项目,并没有太大变化。
【问题讨论】:
【参考方案1】:您有一个“来自回收视图项的陈旧状态”的经典案例。
您的问题
您只设置正确答案的背景。当该项目视图被回收并用于错误答案时,您不会对其进行更新,它会保留其上设置的旧背景。
解决方案
始终明确设置回收站项目视图的完整状态。在这种情况下,当它不是正确答案时,将背景设置为任何它应该是的。
public void bind(Question question)
int correctAnswerNumber = question.getCorrectAnswer();
// Reset all backgrounds to default before setting the current correct one
answer1.setBackground(getDefaultBackgroundBorder());
answer2.setBackground(getDefaultBackgroundBorder());
answer3.setBackground(getDefaultBackgroundBorder());
answer4.setBackground(getDefaultBackgroundBorder());
switch (correctAnswerNumber)
case 1:
answer1.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 2:
answer2.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 3:
answer3.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
case 4:
answer4.setBackground(AppCompatResources.getDrawable(context, R.drawable.correct_answer_border));
break;
【讨论】:
这完全有效。非常感谢。 不客气。您可以将答案标记为已接受,以表明问题已解决。以上是关于根据数据更改 Recycler View 项目的主要内容,如果未能解决你的问题,请参考以下文章
为啥 onBindViewHolder 索引在 Recycler View 中没有增加?