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



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

我有一个射频识别设备。当我读取标签时,它会用具有标签代码的卡片视图填充列表视图。

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

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

有谁知道该怎么做?看起来很简单,但我真的想不通。

我做了一个开关案例,我尝试了如果/否则,但没有任何效果。它只是将所有卡片颜色更改为相同的颜色。 它不会单独更改颜色。 实际上,卡片视图内的信息是正确的!但我不明白为什么颜色不会单独改变。所有卡片都变得具有相同的颜色,无论它们是否被读取。

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

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

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

相关内容

  • 没有找到相关文章

最新更新