2

I have 5 cardviews that each has their data loaded from my Firebase project. I want each of them to open a specific activity but when i click a random one All 5 activities starts.

So my question is: How do I open a specific Activity when clicking on a specific cardview?

I've been following this answer here

My onBindViewHolder():

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
    String strTreatmentImage = treatmentList.get(position).getImage();
    Picasso.get().load(strTreatmentImage).placeholder(R.drawable.ic_circle).into(viewHolder.treatmentImage);

    String strTreatmentName = treatmentList.get(position).getTreatmentName();
    viewHolder.treatmentName.setText(strTreatmentName);

    viewHolder.treatmentCardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent;
            switch (position) {
                case 0:
                    intent = new Intent(context, LashLiftActivity.class);
                    context.startActivity(intent);
                case 1:
                    intent = new Intent(context, BrowsActivity.class);
                    context.startActivity(intent);
                case 2:
                    intent = new Intent(context, NiMesoActivity.class);
                    context.startActivity(intent);
                case 3:
                    intent = new Intent(context, MesoTherapyActivity.class);
                    context.startActivity(intent);
                case 4:
                    intent = new Intent(context, SingleLashesActivity.class);
                    context.startActivity(intent);
                    break;
            }
        }
    });

}

And my class ViewHolder:

static class ViewHolder extends RecyclerView.ViewHolder{

    ImageView treatmentImage;
    TextView treatmentName;
    CardView treatmentCardView;

    ViewHolder(@NonNull View itemView) {
        super(itemView);

        treatmentImage = itemView.findViewById(R.id.treatmentThumb);
        treatmentName = itemView.findViewById(R.id.txt_treatmentName);
        treatmentCardView = itemView.findViewById(R.id.treatmentCardView);

        ButterKnife.bind(this, itemView);
    }
}

My CardView xml:

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:cardCornerRadius="10dp"
app:cardElevation="3dp"
android:foreground="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:id="@+id/treatmentCardView">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:divider="@null"
    android:dividerHeight="0dip">

    <ImageView
        android:id="@+id/treatmentThumb"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:padding="5dp"
        android:src="@drawable/logo_5"/>

    <TextView
        android:id="@+id/txt_treatmentName"
        android:gravity="center"
        android:textSize="24sp"
        android:text="Treatment name #1"
        android:layout_marginBottom="8dp"
        android:fontFamily="@font/kollektif"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Please help, and thanks in advance.

DannyTraan
  • 145
  • 9

1 Answers1

2

You just need to add break statement for each switch case; as when you get a case match that has no break statement, then all underlying case statements will still execute.

switch (position) {
    case 0:
        intent = new Intent(context, LashLiftActivity.class);
        context.startActivity(intent);
        break;
    case 1:
        intent = new Intent(context, BrowsActivity.class);
        context.startActivity(intent);
        break;
    case 2:
        intent = new Intent(context, NiMesoActivity.class);
        context.startActivity(intent);
        break;
    case 3:
        intent = new Intent(context, MesoTherapyActivity.class);
        context.startActivity(intent);
        break;
    case 4:
        intent = new Intent(context, SingleLashesActivity.class);
        context.startActivity(intent);
        break;
}
Zain
  • 37,492
  • 7
  • 60
  • 84