Я пытаюсь установить фон карты, на которой щелкнул, в окне просмотра корзины (чтобы отобразить состояние подключения устройства 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, но если я не пропустил что-то, что не помочь мне получить вид карты в момент нажатия на нее? (адаптер уже привязан к этому моменту?)