繁体   English   中英

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

[英]How to change a cardview color inside a listview programatically?

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

我有一个RFID设备。 当我读取标签时,它将使用具有标签代码的cardviews填充一个listview。

我只有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);
        }
}

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

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

您可以在本例中看到类似的内容

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

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);
        }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM