为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式在 RecyclerView 项目(项目中的某个元素)上设置背景颜色

以编程方式在 RecyclerView 项目(项目中的某个元素)上设置背景颜色

繁星淼淼 2023-04-26 15:59:33
我有ActivityGame一个TextView包含面数的。同样,Activity我有一个RecyclerView并且那个RecyclerView当然包含多个项目。这些项目有不同的标准编号。例如,Par number inActivityGame是 3,现在在RecyclerViewitems 中,假设我有 1 个 par number 为 3 的项目,第二个有 2,第三个有 4。如果一个项目的标准编号与 的标准编号相同ActivityGame,那么该项目的标准编号背景应该变成灰色。如果项目的标准件数大于 中的标准件数ActivityGame,则项目的标准件数背景应变为紫色。最后,如果它小于ActivityGamepar number,则该项目的 par number 背景应该变为蓝色。这是我试图在适配器中做的事情,以使其工作:@Overridepublic 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是实现这一目标的正确位置,但我显然采用了错误的方法。如果您对我应该在哪里或如何处理这个问题有更好的想法,请分享。提前致谢。
查看完整描述

2 回答

?
www说

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。


查看完整回答
反对 回复 2023-04-26
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您的活动中不应该有静态小部件。相反,您应该将 par 编号作为参数传递给适配器构造函数,这样您就不必在活动中声明静态方法来获取 par 值。

如果 par 值可能会实时更改,则向您的适配器添加一个方法以获取新的 par 值,然后刷新适配器项目。只要面值发生变化,就会从活动中调用该方法。


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信