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.");
}
});
}
}