Как я могу узнать, какая кнопка нажата в моем CardView, если у меня есть динамический RecyclerView/CardView?

У меня есть два просмотра изображений в моем виде карты, теперь как я могу установить OnClickListeners, чтобы я мог знать, какая кнопка в каком виде карты выбрана. im1 и im2 - мои интерактивные изображения

Это мой код:

    @Override
public void onBindViewHolder(ViewHolder holder, int position) {
    ConnIfInfo dataModel = ifList.get(position);
    Log.d("Name", "if list name: "+dataModel.getName());
    holder.name.setText(dataModel.getName());
    holder.appName.setText(dataModel.getApp().toString());
    if(String.valueOf(dataModel.getPreferredModeMode().toString()) .equals( String.valueOf(ProjectionTypes.OperationMode.AOA_AA)))
    {
        holder.im1.setImageResource(R.drawable.auto1);
        holder.im2.setImageResource(R.drawable.carlife);
        holder.im1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    iPhoneProjectionManager.startApp(1,"Nexus 5");
                }  catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });

        holder.im2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    iPhoneProjectionManager.startApp(2,"Nexus 6");
                }  catch (RemoteException e) {
                    e.printStackTrace();
                }

            }
        });

    }

}
@Override
public int getItemCount() {
    return ifList.size();
}

2 ответа

Решение

Вы можете установить тег для представления. Тег может быть любым объектом.

holder.im2.setTag(position);

Вы также можете установить много тегов, с ключом, и ключ должен быть уникальным resId. Вы можете сбросить идентификаторы в ids.xml. Отослать это

holder.im2.setTag(<res_id>, position);

и вы можете получить тег как

holder.im2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           v.getTag()
           //or if you set with key then
           v.getTag(<res_id>)
           // please check for null value
        }
    });

вместо установки onClickListener внутри onBindViewHolder вы можете сделать это в самом классе ViewHolder

Вы также можете сделать это с помощью интерфейса. Для получения более подробной информации, пожалуйста, ознакомьтесь с этой ссылкой, содержащей краткую информацию о том, как обрабатывать событие клика с помощью интерфейса.

Другие вопросы по тегам