Как запустить другое действие из imagebutton, которое находится внутри recyclerview?

Я делаю проект Android Studio, для этого я создал RecyclerView для списка покупок, и все было в порядке, но теперь мне нужно, чтобы, когда клиент нажимает на категорию, запускал личные действия для этой опции. Проблема в том, что когда я связывал настроенное действие для «Бебидаса», задействовались все кнопки. Как я могу сделать так, чтобы только категория "Bebidas" могла читать это действие? Я надеюсь, что кто-то может мне помочь. Спасибо.

Вот MainActivity:

public class CategoriasActivity extends AppCompatActivity {

ArrayList<Categorias> listaCategorias;
RecyclerView recyclerCategorias;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_categorias);

    listaCategorias=new ArrayList<>();
    recyclerCategorias =(RecyclerView) findViewById(R.id.recyclerid);
    //recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    recyclerCategorias.setLayoutManager(new GridLayoutManager(this,2));

    llenarCategorias();

    AdaptadorCategorias adapter=new AdaptadorCategorias(listaCategorias);

    adapter.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            Toast.makeText(getApplicationContext(), "Selección: "+listaCategorias.get(recyclerCategorias.getChildAdapterPosition(view)).getNombre(), Toast.LENGTH_SHORT).show();
        }
    });
    recyclerCategorias.setAdapter(adapter);
}

private void llenarCategorias(){
    listaCategorias.add(new Categorias("Congelados",R.drawable.congelados));
    listaCategorias.add(new Categorias("Bebidas", R.drawable.bebida));
    listaCategorias.add(new Categorias("Panadería", R.drawable.panaderia));
    listaCategorias.add(new Categorias("Pastelería", R.drawable.pasteleria));
}

public void onclick(View view) {
    Intent intent=new Intent(getApplicationContext(), BebidasActivity.class);
    startActivity(intent);
}

}

Вот класс:

public class Categorias {
private String nombre;
//private String info;
private int foto;

public Categorias(String nombre, int foto){ //String info
    this.nombre = nombre;
    //this.info = info;
    this.foto = foto;
}

public Categorias(){

}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

/*public String getInfo() {
    return info;
}

public void setInfo(String info) {
    this.info = info;
}*/

public int getFoto() {
    return foto;
}

public void setFoto(int foto) {
    this.foto = foto;
}

}

Вот адаптер:

public class AdaptadorCategorias
    extends RecyclerView.Adapter<AdaptadorCategorias.ViewHolderCategorias>implements View.OnClickListener {

ArrayList<Categorias> listaCategorias;

private View.OnClickListener listener;

public AdaptadorCategorias(ArrayList<Categorias> listaCategorias) {
    this.listaCategorias = listaCategorias;
}

@Override
public ViewHolderCategorias onCreateViewHolder(ViewGroup parent, int viewType) {
    View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.categorias_list, null, false);
    view.setOnClickListener(this);

    return new ViewHolderCategorias(view);
}

@Override
public void onBindViewHolder(ViewHolderCategorias holder, int position) {

    //Asignamos los valores correspondientes a cada TextView
    holder.nombre.setText(listaCategorias.get(position).getNombre());
    //holder.info.setText(listaCategorias.get(position).getInfo());
    holder.idImagen.setImageResource(listaCategorias.get(position).getFoto());

    //Asignar eventos a los botones

}

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

public void setOnClickListener(View.OnClickListener listener){
    this.listener=listener;
}

@Override
public void onClick(View view) {
    if (listener!=null){
        listener.onClick(view);
    }
}

public class ViewHolderCategorias extends RecyclerView.ViewHolder {

    TextView nombre; //, info;

    ImageButton idImagen;

    public ViewHolderCategorias(View itemView) {
        super(itemView);
        nombre=(TextView) itemView.findViewById(R.id.idNombre);
        //info=(TextView) itemView.findViewById(R.id.idInfo);
        idImagen=(ImageButton) itemView.findViewById(R.id.idImagen);
    }
}

}

Вот xml RecyclerView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ImageButton
    android:id="@+id/idImagen"
    android:layout_width="112dp"
    android:layout_height="111dp"
    android:layout_gravity="center"
    android:layout_marginTop="10dp"
    android:background="@android:color/transparent"
    android:src="@drawable/bebida"
    android:onClick="onclick"/>

<TextView
    android:id="@+id/idNombre"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Bebidas"
    android:textSize="20sp"
    android:textStyle="bold"
    android:layout_marginBottom="10dp"/>

Вот файл activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ImageButton
    android:id="@+id/idImagen"
    android:layout_width="112dp"
    android:layout_height="111dp"
    android:layout_gravity="center"
    android:layout_marginTop="10dp"
    android:background="@android:color/transparent"
    android:src="@drawable/bebida"
    android:onClick="onclick"/>

<TextView
    android:id="@+id/idNombre"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Bebidas"
    android:textSize="20sp"
    android:textStyle="bold"
    android:layout_marginBottom="10dp"/>

0
0
54
2

Ответы 2

В АДАПТЕРЕ

private OnItemClickListener onItemClickListener;

      @Override
        public ViewHolderCategorias onCreateViewHolder(ViewGroup parent, int viewType) {
            View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.categorias_list, null, false);
            ViewHolderCategorias viewHolderCategorias = new ViewHolderCategorias(view);
    //        view.setOnClickListener(this);
            viewHolderCategorias.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) onItemClickListener.onItemClick(holder); //use CALL BACK
                }
            });

            viewHolderCategorias.idImagen.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) onItemClickListener.onButton(holder); //use CALL BACK
                }
            });

            return viewHolderCategorias;
        }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) { // Using with activity
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener { // CALL BACK
        void onItemClick(RecyclerView.ViewHolder holder);
        void onButton(RecyclerView.ViewHolder holder);
    }

В ДЕЯТЕЛЬНОСТИ

 adapter = new AnswerSheetAdapter(getContext());
    adapter.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(RecyclerView.ViewHolder holder) {
                    // do SomeThing
                }

                @Override
                public void onButton(RecyclerView.ViewHolder holder) {
                    // do SomeThing
                }
            });

Надеюсь, это вам поможет. !!

public class ViewHolderCategorias extends RecyclerView.ViewHolder {

    TextView nombre; //, info;

    ImageButton idImagen;

    public ViewHolderCategorias(View itemView) {
        super(itemView);
        nombre=(TextView) itemView.findViewById(R.id.idNombre);
        //info=(TextView) itemView.findViewById(R.id.idInfo);
        idImagen=(ImageButton) itemView.findViewById(R.id.idImagen);

        idImagen.setOnClickListener(new OnCLickListener(){
                 @Override
                 public void onCLick(View view){
                    view.getContext().startActivity(new Intent(view.getContext(), NewActivity.class));
                }
            });
        }
    }

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