首页 > 解决方案 > 如何获取屏幕上未显示的 RecyclerView 项目的数据?

问题描述

我有一个 recyclerView ,它的每个项目都包含一个问题标题以及其中的一个 recyclerView 。单击发送按钮时,我想更改第二个 recyclerView 中项目的颜色。我用这些代码行来做到这一点:(questionListView是 RecyclerView 并且ansRecycle是第二个 RecyclerView)

        for (int i=0;i<adapter.getItemCount();i++){
            questionListView.scrollToPosition(i);
            questionListView.
            adapter.notifyItemChanged(i);
            View view=questionListView.findViewHolderForAdapterPosition(i).itemView;
            RecyclerView ansRecycle=view.findViewById(R.id.checkedAnswerLayout);
            for(int j=0;j<ansRecycle.getAdapter().getItemCount();j++) {
                View temp=ansRecycle.getChildAt(j);
                CheckBox ch=temp.findViewById(R.id.checkedChoice);
                if(ch.getText().toString().equals(questions.get(i).getCorrectAnswers())){
                    ch.setTextColor(Color.RED);
                }
            }

        }

对于屏幕上显示的项目,一切都很好,但对于其他项目,不存在 ViewHolder,我无法更改它们的颜色。我怎样才能做到这一点?

标签: androidandroid-recyclerview

解决方案


问题是不在屏幕上的项目不存在。recyclerview 的全部意义在于它使用少量视图,并在它们离开屏幕时回收它们。您应该做的是在绑定数据时执行相同的“如果”:

    @Override
    public void onBindViewHolder(MyDataViewHolder holder, int position) {
        if(ch.getText().toString().equals(questions.get(i).getCorrectAnswers())){
            ch.setTextColor(Color.RED);
        }
    }

推荐阅读