如何以编程方式更改列表视图中的卡片视图颜色?

时间:2019-07-10 17:01:44

标签: java android android-cardview

更新:我尝试创建3种不同的布局,一种使用绿卡,另一种使用红色,另一种使用黄色。它仍然无法正常工作。所有颜色保持不变。 :(

我有一个RFID设备。当我读取标签时,它会使用带有标签代码的cardviews填充一个列表视图。

我只有3条规则:如果读取的标签存在于加载到设备中的文本文件中,则卡将变为绿色。如果读取的标签在文本文件中不存在,它将变为黄色。而且如果我不阅读标签,文本文件中存在的代码(换句话说,如果标签缺失),则卡片视图将变为红色。

一切正常。 RFID阅读器,应用程序,确定。 但是我根本无法正确更改颜色。

有人知道怎么做吗?看起来很简单,但我真的不知道。

我做了一个开关盒,我尝试了if / else,但是没有任何效果。它只是将所有卡片的颜色更改为相同的颜色。 它不会单独更改颜色。 实际上,卡片视图中的信息是正确的!但是我不明白为什么颜色不会单独改变。所有卡都变成相同的颜色,无论是否读取都无所谓。

这是我的适配器类。请忽略注释行,它们都是我的尝试...

public class NewAdapter extends BaseAdapter {

    private Context context;
    private List<PropsCard> cardProps1;
    //private RecyclerView.Recycler<PropsCard> cardProps2;

    public NewAdapter(Context context, List<PropsCard> cardProps) {
        this.context = context;
        this.cardProps1 = cardProps;
    }

    @Override
    public int getCount() {
        return cardProps1.size();
    }

    @Override
    public Object getItem(int position) {
        return cardProps1.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        PropsCard cardProps = cardProps1.get(position);

        if (convertView == null) {

            for(com.example.compexrf.PropsCard card: cardProps1) {

                switch (card.cor) {
                    case 0:
                        //Red
                        //cd.setBackgroundColor(Color.parseColor("#F4BABA"));
                        //cdview_red.setCardBackgroundColor(Color.RED);
                        //bt.setBackgroundColor(Color.RED);
                        //CardView cdview_red = (CardView) convertView.findViewById(R.id.cdviewred);
                        //convertView.setBackgroundColor(Color.parseColor("#F4BABA"));
                        //convertView = View.inflate(context, R.layout.card_itens, null);
                        convertView = LayoutInflater.from(context).inflate(R.layout.card_itens, null);
                        //convertView.setBackgroundColor(Color.RED);

                        break;
                    case 1:
                        //Yellow
                        //cd.setBackgroundColor(Color.parseColor("#FCECA4"));
                        //cdview_yellow.setBackgroundColor(Color.YELLOW);
                        //CardView cdview_yellow = (CardView) convertView.findViewById(R.id.cdviewyellow);
                        //convertView.setBackgroundColor(Color.parseColor("#FCECA4"));
                        //convertView = View.inflate(context, R.layout.card_itens2, null);
                        convertView = LayoutInflater.from(context).inflate(R.layout.card_itens2, null);
                        //convertView.setBackgroundColor(Color.YELLOW);

                        break;
                    case 2:
                        //Green
                        //cd.setBackgroundColor(Color.parseColor("#5FDDC1"));
                        //cdview_green.setBackgroundColor(Color.GREEN);
                        //CardView cdview_green = (CardView) convertView.findViewById(R.id.cdviewgreen);
                        //convertView.setBackgroundColor(Color.parseColor("#5FDDC1"));
                        //convertView = View.inflate(context, R.layout.card_itens3, null);
                        convertView = LayoutInflater.from(context).inflate(R.layout.card_itens3, null);
                        //convertView.setBackgroundColor(Color.GREEN);

                        break;
                    default:
                        break;
                }

            }
        }

        TextView desc_txt = (TextView) convertView.findViewById(R.id.descricao);
        TextView cod_txt = (TextView) convertView.findViewById(R.id.codigoRFID);
        ImageView imageView = (ImageView) convertView.findViewById(R.id.image);
        //RelativeLayout relativeLayout = (RelativeLayout) convertView.findViewById(R.id.relative);
        CardView cd = (CardView) convertView.findViewById(R.id.cdviewred);
        CardView cd2 = (CardView) convertView.findViewById(R.id.cdviewyellow);
        CardView cd3 = (CardView) convertView.findViewById(R.id.cdviewgreen);

        //Button bt = (Button) convertView.findViewById(R.id.botao);

        desc_txt.setText(cardProps.desc);
        cod_txt.setText(cardProps.id);

        if (cardProps.desc.contains("Controlador")) {
            imageView.setImageResource(R.drawable.quadro);
            //relativeLayout.setBackgroundColor(Color.parseColor("F4BABA"));
        }

        else if (cardProps.desc.contains("Quadro")) {
            imageView.setImageResource(R.drawable.quadro);
            //relativeLayout.setBackgroundColor(Color.parseColor("FCECA4"));
        }

        else if (cardProps.desc.contains("Quadro")) {
            imageView.setImageResource(R.drawable.quadro);
        }

        else if (cardProps.desc.contains("Câmera de Validação Esteira")) {
            imageView.setImageResource(R.drawable.quadro);
        }

        else if (cardProps.desc.contains("Medicamentos")) {
            imageView.setImageResource(R.drawable.med);
            //relativeLayout.setBackgroundColor(Color.parseColor("5FDDC1"));
        }

        else if (cardProps.desc.contains("Impressora")) {
            imageView.setImageResource(R.drawable.printer01);
        }

        else {
            imageView.setImageResource(R.drawable.cpx);
        }

        return convertView;

    }

这是另一个可以满足我需要的课程:

public class PropsCard implements Comparable<PropsCard> {

    String id;
    String desc;
    int cor;

    public PropsCard(String id, String desc, int cor){
        this.id = id;
        this.desc = desc;
        this.cor = cor;
    }

    public PropsCard(String id, int cor){
        this.id = id;
        this.desc = "";
        this.cor = cor;
    }

    @Override
    public boolean equals (Object object){
        if(object != null && object instanceof PropsCard){
            PropsCard obj = (PropsCard) object;
            return id.equals(obj.id);
        }
        return false;
    }

    @Override
    public int compareTo(PropsCard cdProp){
        if(cor > cdProp.cor)
            return 1;
        else if(cor == cdProp.cor)
            return 0;
        else
            return -1;
    }
}

这是我的RFID读取方法:

public void onScanCompleted(String code, String rssi, int type) {
            PropsCard rdCard = new PropsCard(code, 0);
            if(!cardList.contains(rdCard)){
                rdCard.cor = 1;
                cardList.add(rdCard);
            }
            else {
                int idx = cardList.indexOf(rdCard);
                rdCard = cardList.get(idx);
                if(rdCard.cor == 0) {
                    rdCard.cor = 2;
                    cardList.set(idx, rdCard);
                }
            }
            if(!ScanAndUhf.getHasData())
                makeCards(cardList);
        }
}

2 个答案:

答案 0 :(得分:0)

要更改CardView背景颜色,应使用card.setCardBackgroundColor(color);而不是cd.setBackgroundColor(Color.parseColor(“#FCECA4”));

答案 1 :(得分:0)

我建议您使用自定义适配器并使用可绘制对象。

您可以在此Example

中看到类似的内容

尽管点击时会发生变化,但是您只需要实现自己的逻辑即可,但是事情将会是这样的:

public void onBindViewHolder(MyViewHolder holder, int position) {
if(youritem==somevalue)
   holder.view.setBackgroundColor(Color.GREEN);
else if(youritem==anothervalue)
   holder.view.setBackgroundColor(Color.parseColor("#somecolor"));
}

我一直使用这样的方式来更改文本颜色:

@Override
public void onBindViewHolder(OSCardAdapter.MyViewHolder holder, int position) {

    OSActivity OS = OSListFiltered.get(position);

if(holder.status.getText().toString().equals("CLOSED"))
        {
            holder.status.setTextColor(Color.RED);
        }
}

您可以使用它根据背景更改来更改文本颜色。

相关问题