1

How to open new activity from clicking an item from recyclerview. Click on the courses in the structure of the RecyclerView detail details of the course will be displayed on the next page. I want to open pages with different information for each recycler item.

---RecyclerActivity.java

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setConten``tView(R.layout.lessons_layout);
    recyclerView=findViewById(R.id.recyclerview);
    MyAdapter myAdapter=new 
    MyAdapter(RecylerActivity.this,Lesson.getdata());
    recyclerView.setAdapter(myAdapter);

    LinearLayoutManager linearLayoutManager=new 
    LinearLayoutManager(RecylerActivity.this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);
}

--MyAdapter.java

public MyAdapter(Context context,ArrayList<Lesson> data){

    this.data = data;
    inflater=LayoutInflater.from(context);

    this.mDataList=data;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v=inflater.inflate(R.layout.list_item,viewGroup,false);
MyViewHolder holder=new MyViewHolder(v);
return holder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
    Lesson ClickedLesson=mDataList.get(i);
    myViewHolder.setData(ClickedLesson,i);

}

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

class MyViewHolder extends RecyclerView.ViewHolder{
    TextView mLessonName,mLessonPoint;
    RelativeLayout rel;

    public MyViewHolder(@NonNull final View itemView) {
        super(itemView);
        mLessonName=(TextView)itemView.findViewById(R.id.tvLessonName);
        mLessonPoint=(TextView)itemView.findViewById(R.id.tvLessonPoint);
        rel=(RelativeLayout)itemView.findViewById(R.id.Rellayout);

    }
    public void setData(Lesson ClickedLesson,int i){
        this.mLessonName.setText(ClickedLesson.getLessonname());
        this.mLessonPoint.setText(ClickedLesson.getPoint());
    }

}

--Lesson.Java

public Lesson() {
}
public Lesson(String lessonname,String point) {
    this.lessonname=lessonname;
    this.point=point;
}

public String getLessonname() {
    return lessonname;
}

public String getPoint() {
    return point;
}

public void setLessonname(String lessonname) {
    this.lessonname = lessonname;
}

public void setPoint(String point) {
    this.point = point;
}
public static ArrayList<Lesson> getdata(){
    ArrayList<Lesson> dataList=new ArrayList<Lesson>();

    Lesson tmp=new Lesson();
    tmp.setLessonname("Matematik");
    tmp.setPoint("BA");
    dataList.add(tmp);
    Lesson tmp2=new Lesson();
    tmp2.setLessonname("Mobil programlama");
    tmp2.setPoint("AA");
    dataList.add(tmp2);
    Lesson tmp3=new Lesson();
    tmp3.setLessonname("Algoritma");
    tmp3.setPoint("BB");
    dataList.add(tmp3);
    Lesson tmp4=new Lesson();
    tmp4.setLessonname("İngilizce");
    tmp4.setPoint("DC");
    dataList.add(tmp4);
    Lesson tmp5=new Lesson();
    tmp5.setLessonname("Yapay zeka");
    tmp5.setPoint("CC");
    dataList.add(tmp5);
    return dataList;
}

--list_item.xml

<RelativeLayout
    android:id="@+id/Rellayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/cardview_shadow_end_color"
    android:clickable="true"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/tvLessonName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ders"
        android:textSize="25sp"
        android:textStyle="bold"
        android:layout_margin="7dp"/>
    <TextView
        android:id="@+id/tvLessonPoint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Not"
        android:textSize="20sp"
        android:layout_alignParentEnd="true"
        android:textStyle="italic"
        android:layout_margin="7dp"/>

</RelativeLayout>
namaste1968
  • 23
  • 1
  • 5

4 Answers4

2

Inside your adapter add on click listener to launch activity.

 holder.yourItem.setOnClickListener(v -> {
            Intent intent = new Intent(context, YourActivity.class);
            Lesspn lesson = lesson.get(position);
            intent.putExtra("lesson_details", lesson);
            context.startActivity(intent, options.toBundle());
        });

Then in next activity

Lesson lesson = (Lesson) intent.getSerializableExtra("lesson_details");

Your Lesson class should implements Serializable

kvaruna
  • 388
  • 1
  • 4
  • 23
1

Define an interface in your adapter class as

interface LessonClickListener{
    public void clickedLession(Lesson lession);
}

Now initialize this in your adapter constructor as follows

public MyAdapter(Context context,ArrayList<Lesson> data, LessonClickListener listener){
this.data = data;
inflater=LayoutInflater.from(context);
this.listener=listener;

this.mDataList=data;

}

In your MyViewHolder add click listener

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.clickedLession(mDataList.get(getAdapterPosition()));
            }
});

finally implement this LessionClickListener from your RecyclerActivity and override clickedLession(). Now inside this method, you can start another activity by sending Lession class data

Ankit Dubey
  • 1,000
  • 1
  • 8
  • 12
0

Try this,

class MyViewHolder extends RecyclerView.ViewHolder{
TextView mLessonName,mLessonPoint;
RelativeLayout rel;

public MyViewHolder(@NonNull final View itemView) {
    super(itemView);
    mLessonName=(TextView)itemView.findViewById(R.id.tvLessonName);
    mLessonPoint=(TextView)itemView.findViewById(R.id.tvLessonPoint);
    rel=(RelativeLayout)itemView.findViewById(R.id.Rellayout);

    itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                    Intent intent = new Intent(v.getContext(), 
                                    NextActivity.class);
                        v.getContext().startActivity(intent);
                }} }
Brahma Datta
  • 1,102
  • 1
  • 12
  • 20
0

Let's try this in your onBindViewHolder

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context mContext = v.getContext();
                final Intent intent;
    switch (getAdapterPostion()){
        case 0:
           intent =  new Intent(context, FirstActivity.class);
           break;

        case 1:
            intent =  new Intent(context, SecondActivity.class);
            break;
           ...
        default:
           intent =  new Intent(context, DefaultActivity.class);
           break;
     }
                mContext.startActivity(intent);         
            }
siftoshka
  • 53
  • 1
  • 1
  • 9