Reputation: 152
I am trying to open different Activity for different cards in CardView but I am only able to open the same activity for all the cards. I am attaching my RVAdapter code below. Please help.
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder>{
List<person> persons;
public static class PersonViewHolder extends RecyclerView.ViewHolder{
CardView cv;
TextView tv1,tv2;
PersonViewHolder(View itemView){
super(itemView);
cv=(CardView)itemView.findViewById(R.id.cv);
tv1=(TextView)itemView.findViewById(R.id.tx1);
tv2=(TextView)itemView.findViewById(R.id.tx2);
cv.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v){
cv.getContext().startActivity(new Intent(cv.getContext(), second.class));
}
});
}
}
RVAdapter(List<person> persons){
this.persons=persons;
}
@Override
public int getItemCount()
{
return persons.size();
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup,int i){
View v= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_scroll_activity,viewGroup,false);
PersonViewHolder pvh=new PersonViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PersonViewHolder holder, int i) {
holder.tv1.setText(persons.get(i).name);
holder.tv2.setText(persons.get(i).branch);
}
@Override
public void onAttachedToRecyclerView(RecyclerView rcv)
{
super.onAttachedToRecyclerView(rcv);
}
}
Upvotes: 0
Views: 1348
Reputation: 6781
Use OnClick Listener implementation for onBindViewHolder.
Following gives a simple example with Toast for showing which Card was selected : (inside onBindViewHolder)
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Pos : " + position, Toast.LENGTH_SHORT).show();
}
});
Just modify the onClick to call your activity.
Upvotes: 0
Reputation: 1304
If my understanding of your question is correct, if there are three different card view, you have three different activities, each for every card view. To do that, you have to identify the card view using the position and then set click listener to associated activity for that particular cardview in onBindViewHolder
Intent intent;
if(i == 0)
intent = new Intent(context, Class1.class);
else if(i == 1)
intent = new Intent(context, Class2.class);
else
intent = new Intent(context, Class3.class);
holder.itemView.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v){
context.startActivity(intent);
}
}
Upvotes: 0
Reputation: 1833
You've effectively only set one click listener.
You will want to set a click listener on each element in your list.
Inside your onBindViewHolder
write something like this:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v){
v.getContext().startActivity(new Intent(v.getContext(), second.class));
}
});
Upvotes: 2