当前位置: 首页 > 知识库问答 >
问题:

在RecyclerView的OnBindViewHolder中更改视图的文本颜色或背景色

施念
2023-03-14

我想改变文本的文本颜色在回收器视图项目或项目的背景,但我不能改变。它只改变了一些项目。我尝试了几十次这些代码。它改变了相同项目的颜色,但不是所有的项目,如果语句是真的。我也尝试了runOnUiThrad,但仍然不能改变。

getQuantity()和getLowQuantityAlertValue()方法返回double。

if语句有问题吗?

  @Override
public void onBindViewHolder(@NonNull ProductViewHolder productViewHolder, int position) {
    NumberFormat format = NumberFormat.getCurrencyInstance();
    Product mCurrent = objects.get(position);
    String pieces = mCurrent.getQuantity() + " " + mCurrent.getAmountType() + " " + productViewHolder.context.getText(R.string.pieces);
        if (mCurrent.getQuantity() < 1.0) {
            pieces = productViewHolder.context.getText(R.string.out_of_stock).toString();
            productViewHolder.itemQuantity.setTextColor(Color.RED);
        }
        if (mCurrent.getQuantity() <= mCurrent.getLowQuantityAlertValue()) {
            pieces = mCurrent.getQuantity() + " " + mCurrent.getAmountType() + " " + productViewHolder.context.getText(R.string.pieces);
            productViewHolder.itemQuantity.setTextColor(context.getResources().getColor(R.color.orange));
        }

    productViewHolder.itemName.setText(mCurrent.getName());
    productViewHolder.sellingPrice.setText(String.valueOf(format.format(mCurrent.getPerSellingPrice())));
    productViewHolder.itemQuantity.setText(pieces);
    productViewHolder.listItemBarcode.setText(mCurrent.getBarcode());

    if (mCurrent.getImageUrl() != null && !mCurrent.getImageUrl().equals("")) {

        Glide.with(productViewHolder.listItemImage.getContext())
                .load(mCurrent.getImageUrl())
                .apply(new RequestOptions().placeholder(R.drawable.noimage)
                        .error(R.drawable.noimage))
                .into(productViewHolder.listItemImage);
    } else {
        productViewHolder.listItemImage.setImageResource(R.drawable.noimage);
    }
}

共有1个答案

石正信
2023-03-14

请记住,始终在onBindViewHolder方法中处理“其他”情况。您的ViewHolder将被重新用于列表中的元素,因此颜色可以随机更改(如果您不将其设置回默认值)。所以你必须在“else”的情况下设置一些默认颜色。你的情况如下:

if (mCurrent.getQuantity() < 1.0) {
            pieces = productViewHolder.context.getText(R.string.out_of_stock).toString();
            productViewHolder.itemQuantity.setTextColor(Color.RED);
        } else if (mCurrent.getQuantity() <= mCurrent.getLowQuantityAlertValue()) {
            pieces = mCurrent.getQuantity() + " " + mCurrent.getAmountType() + " " + productViewHolder.context.getText(R.string.pieces);
            productViewHolder.itemQuantity.setTextColor(context.getResources().getColor(R.color.orange));
        } else {
            productViewHolder.itemQuantity.setTextColor(Color.RED) // any default color
        }
 类似资料:
  • 我试图根据通过给出的整数值来更改回收站视图中列表项中的文本视图的背景颜色。此方法返回0-100之间的int值。 我在下面发布的代码适用于创建的初始列表项,但当删除一个项(通过从左向右滑动)并创建一个新列表项时,颜色不正确。此外,随着更多的内容被删除,以前的项目(一旦正确)将颜色更改为不正确的颜色。我不确定我的方法有什么问题,希望能在这件事上得到一些纠正和指导。我希望一个解决方案能得到更好的实施。

  • 我想知道如何更改文本视图的背景,因为我正在从站点解析中提取数据。com,但我不能这样做,我正在尝试这样做。 代码 错误 04-30 11:56:59.156 28388-28691/com。实例ronysueliton。patospizzas E/AndroidRuntime﹕ 致命异常:AsyncTask#2进程:com。实例ronysueliton。patospizzas,PID:28388爪

  • 我开始尝试,我感到惊讶的是,更改

  • 问题内容: 我想更改主视图(而不是按钮或文本视图)的背景颜色,而只是通常是黑色的真实背景…我得到了以下代码: 它在的内部,但只是更改了Button的背景。 问题答案: 尝试用类似的方法创建一个方法… 然后从您的OnClickListener调用它,并传递您想要的任何颜色。

  • 这看起来非常简单,我是JavaFX新手,我无法更改JavaFX TreeView的背景和文本颜色(添加在GridPane中)。我已经用填充树项的根节点初始化了树视图构造函数。 在. css中: 在代码中 字体设置了,但没有其他设置。我似乎找不到任何人改变treeview背景的例子——在select和hover上做了很多奇特的改变。有什么想法吗?

  • 我无法让JPanel改变颜色。我也不能让JFrame改变颜色。我在网上查过...我还有一个程序,它有几乎相同的代码来设置JPanel和JFrame。我就是不能让它起作用。 下面是我的主要方法: 编辑:稍后在我的主要方法中有 下面是JPanel的构造函数: 背景颜色保持默认灰色。