我有ActivityGame
,其中的TextView
包含票证编号。在同一个Activity
中,我有一个RecyclerView
,并且RecyclerView
当然包含多个项目。这些项目具有不同的面值。
例如,在ActivityGame
中的面值是3,现在在RecyclerView
项中,假设我有1个项的面值是3,第二个是2,第三个是4。
如果某项的票证编号与ActivityGame
的票证编号相同,则该项目的票证编号背景应变为灰色。如果项目的面值大于ActivityGame
中的面值,则项目的面值背景应更改为紫色。最后,如果它的票证编号小于ActivityGame
的票证编号,则该项目的票证编号背景应更改为蓝色。
为了使这项工作,我尝试在适配器中执行以下操作:
@Override
public void onBindViewHolder(@NonNull GameViewHolder holder, int position) {
holder.mTextPar.setText(currentItem.getText2());
/** 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()) < Integer.parseInt(ActivityGame.mHoleNm.getText().toString())) {
holder.mTextPar.setBackgroundColor(Color.parseColor("#255eba"));
notifyDataSetChanged();
}
}
这是我认为可行的方法,但是当我尝试打开发生所有这些情况的
ActivityGame
时,它没有起作用,我的应用程序立即崩溃。我认为
onBindViewHolder
是实现此目标的正确位置,但是我显然有错误的方法。如果您有更好的主意,我应该在哪里或如何处理,请分享。提前致谢。 最佳答案
首先,您不必每次在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
。