Как программно изменить цвет карты внутри списка? - PullRequest
0 голосов
/ 10 июля 2019

ОБНОВЛЕНИЕ: я пытался создать 3 различных макета, один с зеленой карточкой, другой с красным, а другой с желтым.Это все еще не работает.Все цвета остаются прежними.: (

У меня есть RFID-устройство. Когда я читаю теги, он заполняет просмотр списка просмотрами карт с кодом тега.

У меня есть только 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 голосов
/ 10 июля 2019

Я бы порекомендовал вам использовать пользовательский адаптер и использовать Drawable.

Вы можете увидеть что-то подобное в этом примере

Хотя это меняется при нажатии, вам просто нужно реализовать свою логику, но это будет примерно так:

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

Вы можете использовать его для изменения цвета текста в соответствии с изменениями фона.

0 голосов
/ 10 июля 2019

Чтобы изменить цвет фона CardView, вы должны использовать card.setCardBackgroundColor(color); вместо cd.setBackgroundColor (Color.parseColor ("# FCECA4"));

...