【问题标题】:Changing Recycler View item based on its data根据数据更改 Recycler View 项目
【发布时间】: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;
        }

}

这里的上下文是从活动中传递过来的,我必须想好要做什么。 我尝试将逻辑移除到构造函数,更改上下文,通过持有者寻址项目,并没有太大变化。

【问题讨论】:

    标签: java android android-recyclerview android-adapter android-viewholder


    【解决方案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;
        }
    }
    

    【讨论】:

    • 这完全有效。非常感谢。
    • 不客气。您可以将答案标记为已接受,以表明问题已解决。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多