更新:我尝试创建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);
}
}
答案 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);
}
}
您可以使用它根据背景更改来更改文本颜色。