как установить цвет фона для спецификационной карты c (при помощи метода) при нажатии - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь установить фон карты, на которой щелкнул, в окне просмотра корзины (чтобы отобразить состояние подключения устройства Bluetooth). у меня есть все шаги, необходимые для itemclick (адаптер, set onitemclickloistener и т. д. c), но не можете найти способ установить фон? (Я могу только найти ОБЪЕКТ карты, которую я нажал, а не ПРОСМОТР, чтобы установить ее фон программно)

мой слушатель установил из основной активности:

//task to carry out when clicking a card item
        recycAdapter.setOnItemClickListener(new CardAdapterDevice.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {

                //create pop up choice to connect to device
                final Dialog dialog = new Dialog(BluetoothActions.this);
                dialog.setContentView(R.layout.dialog_popup_connect_to_device);
                dialog.setTitle("Connect to Device");

                //assign dialog button etc (to call connection and set background method)

                dialog.show();
            }
        });

, но я хочу позвонить метод, когда кнопка диалога нажата, чтобы завершить соединение и установить фон карты. Я потратил пару часов, исследуя онлайн и экспериментируя, пытаясь понять это, и я просто не могу найти что-нибудь, что работает?

Кто-нибудь может подсказать, как это сделать?

edit: как предложено, я включил мой адаптер ниже для справки.

public class CardAdapterDevice extends RecyclerView.Adapter<CardAdapterDevice.CardViewHolder> {
    private static final String TAG = "CardAdapterDevice";

    private ArrayList<DeviceCard> cardList;
    private OnItemClickListener clickListener;
    public CardAdapterDevice(ArrayList<DeviceCard> exampleList) {
        cardList = exampleList;
    }

    //-listens for card click in recyclerView
    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public static class CardViewHolder extends RecyclerView.ViewHolder {
        public ImageView deviceIcon;
        public TextView deviceName;
        public ImageView connect;

        public CardViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
            super(itemView);
            //references to views (pass values in onBindViewHolder)
            deviceIcon = itemView.findViewById(R.id.image_carddevice_icon);
            deviceName = itemView.findViewById(R.id.labeltext_carddevice_device_name);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            listener.onItemClick(position);
                        }
                    }
                }
            });
        }
    }

    @NonNull
    @Override
    public CardAdapterDevice.CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_device, parent, false);
        CardViewHolder cvh = new CardViewHolder(v, clickListener);
        return cvh;
    }

    @Override
    public void onBindViewHolder(@NonNull CardAdapterDevice.CardViewHolder holder, int position) {
        //pass information to item currently looked at (position)
        DeviceCard currentItem = cardList.get(position); //item at position
        //get info (image (in holder) changed to image returned by ArrayList item (currentItem))
        holder.deviceIcon.setImageResource(currentItem.getImageResource());
        holder.deviceName.setText(currentItem.getDeviceName());
    }

    //-get number of items in list
    @Override
    public int getItemCount() {
        return cardList
                .size();
    }


    //-sets the desired click listener
    public void setOnItemClickListener(OnItemClickListener listener) {
        clickListener = listener;
    }
}

также надеется немного прояснить ситуацию: если бы я сам вручную создал каждую карту как переменную, у меня был бы прямой доступ к ней, и я мог бы вызывать методы, подобные cardView.setBackgroundColor(etc), по мере их создания и добавлен в recyclerView автономно, у меня нет этой переменной, и мне нужно найти способ получить ссылку на представление из самого клика?

я видел много примеров onBindAdapter, но если я не пропустил что-то, что не помочь мне получить вид карты в момент нажатия на нее? (адаптер уже привязан к этому моменту?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...