根据其数据更改 Recycler View 项目
Changing Recycler View item based on its data
所以我有一个带问题的 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;
}
}
这里的上下文是从activity传过来的,我得想办法了。
我尝试删除构造函数的逻辑,更改上下文,通过 holder 处理项目,但没有太大变化。
您有一个经典案例“来自回收视图项的陈旧状态”。
你的问题
您只设置了正确答案的背景。当该项目视图被回收并用于错误答案时,您不会更新它,它会保留设置在其上的旧背景。
解决方案
始终明确设置回收站项目视图的完整状态。在这种情况下,当它不是正确答案时,将背景设置为应有的样子。
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;
}
}
所以我有一个带问题的 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;
}
}
这里的上下文是从activity传过来的,我得想办法了。 我尝试删除构造函数的逻辑,更改上下文,通过 holder 处理项目,但没有太大变化。
您有一个经典案例“来自回收视图项的陈旧状态”。
你的问题
您只设置了正确答案的背景。当该项目视图被回收并用于错误答案时,您不会更新它,它会保留设置在其上的旧背景。
解决方案
始终明确设置回收站项目视图的完整状态。在这种情况下,当它不是正确答案时,将背景设置为应有的样子。
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;
}
}