Nandan A
Nandan A

Reputation: 152

How to open different activity for each CardView in android?

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

Answers (3)

Kaushik NP
Kaushik NP

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

hehe
hehe

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

CzarMatt
CzarMatt

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

Related Questions