viewholder setadapter recyclerview item how holder custom create android android-intent onclick onclicklistener android-recyclerview

android - setadapter - RecyclerView: obtener posición y cambiar a actividad



recyclerview setadapter (3)

Dentro de su onClick(View v) puede simplemente llamar a getLayoutPosition() que devolverá la posición donde ocurrió el clic. Consulte los documentos oficiales para más información.

Entonces tu código sería algo como esto:

@Override public void onClick(View v) { switch(getLayoutPosition()){ //TODO } }

Preferiblemente debería utilizar una interfaz para manejar el clic.

¿Cómo es posible obtener la posición del elemento en el que se hizo clic en la fila RecyclerView y hacer un intento de realizar una actividad en el método onClick ? Aquí está mi adaptador:

public class SergejAdapter extends RecyclerView.Adapter<SergejAdapter.MyViewHolder>{ private LayoutInflater inflater; List<Information> data= Collections.emptyList(); public SergejAdapter(Context context, List<Information> data){ inflater = LayoutInflater.from(context); this.data=data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.navigation_drawer_custom_row,parent,false); MyViewHolder holder= new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Information current=data.get(position); holder.title.setText(current.title); } @Override public int getItemCount() { return data.size(); } class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView title; ImageView icon; public MyViewHolder(View itemView){ super(itemView); title= (TextView) itemView.findViewById(R.id.listText); icon = (ImageView) itemView.findViewById(R.id.listIcon); icon.setOnClickListener(this); } @Override public void onClick(View v) { Context context = itemView.getContext(); Intent intent = new Intent(context, Ernaehrung.class); context.startActivity(intent); } }

Aquí solo tengo un onClick cuando se hizo clic en una de las imágenes, pero cada imagen tiene la misma intención.


Puede obtener la posición de ViewHolder utilizando el método getAdapterPosition() . Como en el código de abajo:

public class SergejAdapter extends RecyclerView.Adapter<SergejAdapter.MyViewHolder>{ ... class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ @Override public void onClick(View v) { // here you use position int position = getAdapterPosition(); ... } } }


o simplemente puede agregar:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder > { ... class MyViewHolder extends RecyclerView.ViewHolder { public MyViewHolder (View itemView) { super(itemView); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Element " + getAdapterPosition() + " clicked."); } }); } }