[英]Set background color programmatically on RecyclerView item (certain element in item)
我有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
是实现此目的的正确位置,但是我显然有错误的方法。 如果您有更好的主意,我应该在哪里或如何处理,请分享。 提前致谢。
您的活动中不应包含静态小部件。 相反,您应该将参数号作为参数传递给适配器构造函数,这样就不必在活动中声明静态方法来获取参数值。
如果par值可能实时更改,则向适配器添加方法以采用新的par值,然后刷新适配器项。 每当par值更改时,都会从活动中调用该方法。
首先,你不必叫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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.