我有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
是实现此目标的正确位置,但是我显然使用了错误的方法。如果您有更好的主意,我应该在哪里或如何处理,请分享。预先感谢。
答案 0 :(得分:0)
您的活动中不应包含静态小部件。相反,您应该将参数号作为参数传递给适配器构造函数,这样就不必在活动中声明静态方法来获取参数值。
如果par值可能实时更改,则向适配器添加一个方法以采用新的par值,然后刷新适配器项。每当par值更改时,都会从活动中调用该方法。
答案 1 :(得分:0)
首先,您不必每次在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
。