Search code examples
androidandroid-fragmentsandroid-activityandroid-recyclerviewonclicklistener

How to open few different activites on recyclerview different item click using if or case method?


I am currently using recycler view in a fragment. I have 4 items in my recycler view list. Now I want to open 4 new different activities using the if/case method. But I can open one activity and not able to open other activities as per their positions. Here is my RecyclerViewAdapter java code. Also please let me know the best practice to open on click listener.

    package com.kidslearning.course.adapter;

    import android.content.Context;
    import android.content.Intent;
    import android.media.Image;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.RecyclerView;

    import com.kidslearning.course.NewHindiActivity;
    import com.kidslearning.course.R;
    import com.kidslearning.course.fragment.EnglishFragment;
    import com.kidslearning.course.fragment.HindiFragment;
    import com.kidslearning.course.fragment.MathFragment;
    import com.kidslearning.course.model.HindiFragmentModel;

    import java.util.List;

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

        Context mContext;
        List<HindiFragmentModel> mData;
        private MathFragment MathFragment;

        public RecyclerViewAdapter(Context mContext, List<HindiFragmentModel> mData) {
            this.mContext = mContext;
            this.mData = mData;
        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View v;
            v = LayoutInflater.from(mContext).inflate(R.layout.fragmentdesign,parent,false);
            MyViewHolder vHolder = new MyViewHolder(v);
            mContext = v.getContext();

            return vHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.tv_name.setText(mData.get(position).getName());
            holder.img.setImageResource(mData.get(position).getPhoto());

            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), NewHindiActivity.class);
                    v.getContext().startActivity(intent);

       //now I want to open other activity by clicking on 2nd recycler view item.    

                }
            });

        }

        @Override
        public int getItemCount() {
            return mData.size();
        }

        public static class MyViewHolder extends RecyclerView.ViewHolder {
            private TextView tv_name;
            private ImageView img;
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                tv_name = (TextView) itemView.findViewById(R.id.titleView);
                img = (ImageView) itemView.findViewById(R.id.imageView);
            }

        }

    }

Solution

  • here is your onClick() code

    holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if (position == 0) {
                        Intent intent = new Intent(v.getContext(), FirstActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 1) {
                        Intent intent = new Intent(v.getContext(), SecondActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 2) {
                        Intent intent = new Intent(v.getContext(), ThirdActivity.class);
                        mContext.startActivity(intent);
                    } else if (position == 3) {
                        Intent intent = new Intent(v.getContext(), FourthActivity.class);
                        mContext.startActivity(intent);
                    }
    
    
                }
            });