2 回答
TA贡献1775条经验 获得超8个赞
首先,您不必notifyDataSetChanged每次在函数中设置背景颜色时都调用onBindViewHolder。
其次,您需要在函数中实现背景颜色的所有条件onBindViewHolder。
我想建议如下实施。
@Override
public void onBindViewHolder(@NonNull GameViewHolder holder, int position) {
holder.mTextPar.setText(currentItem.getText2());
Integer parFromActivity = -1;
if(ActivityGame.mHoleNm != null)
parFromActivity = Integer.parseInt(ActivityGame.mHoleNm.getText().toString());
/** If persons par number is smaller than course par number, then change persons par number background to blue **/
if (Integer.parseInt(holder.mTextPar.getText().toString()) < parFromActivity) {
holder.mTextPar.setBackgroundColor(Color.parseColor("#255eba"));
// notifyDataSetChanged(); // We do not need this line
} else if (Integer.parseInt(holder.mTextPar.getText().toString()) > parFromActivity) {
holder.mTextPar.setBackgroundColor(Color.parseColor("#800080")); // purple maybe
} else {
holder.mTextPar.setBackgroundColor(Color.parseColor("#D3D3D3"));
}
}
希望有帮助!
编辑:
我主要假设从活动中引用的视图是null在您从适配器中使用它时。如果是这种情况,那么您需要以其他方式将值传递给适配器。
由于您已经发现了问题,因此我也将其包含在我的回答中。该视图不是唯一的Integer。因此,我想Integer.parseInt(ActivityGame.mHoleNm.getText().toString()是在扔东西ParseException。
TA贡献1794条经验 获得超8个赞
您的活动中不应该有静态小部件。相反,您应该将 par 编号作为参数传递给适配器构造函数,这样您就不必在活动中声明静态方法来获取 par 值。
如果 par 值可能会实时更改,则向您的适配器添加一个方法以获取新的 par 值,然后刷新适配器项目。只要面值发生变化,就会从活动中调用该方法。
添加回答
举报