android - 如何获取屏幕上未显示的 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,我无法更改它们的颜色。我怎样才能做到这一点?
解决方案
问题是不在屏幕上的项目不存在。recyclerview 的全部意义在于它使用少量视图,并在它们离开屏幕时回收它们。您应该做的是在绑定数据时执行相同的“如果”:
@Override
public void onBindViewHolder(MyDataViewHolder holder, int position) {
if(ch.getText().toString().equals(questions.get(i).getCorrectAnswers())){
ch.setTextColor(Color.RED);
}
}
推荐阅读
- c# - Unity UI 获取组件
- php - 如何使用 PHP 设置 HTML 元素的样式
- android - 仅从 Android 应用程序访问 AWS S3 文件
- kdb - 检查所有表中的列,如果存在列,则打印表名 - kdb
- swift - 无法在 Xcode 预览上构建活动方案
- logging - 如何在 Azerothcore 中启用多个 Server.log(s)
- python - 一次性从单链表中删除第 k 个最后一个元素
- arrays - 如何计算 F# 中锯齿状数组中的元素数?
- java - 在 Arrayadapter 制作的 listView 中执行 setOnItemClickListener
- java - 如何渲染具有特定视野的图像?