Updated 24 September 2023
Expandable RecyclerView is one of the most important feature in Android which can be easily created for our application .
It contains two views one is parent view and other is child view. Parent is visible by default but the child view has to be expanded and collapsed. It will expand when we click on parent view.
We have to create two view holders to hold the view of parent and child
So, by using these we shall create it in our application to make it better.
Add this dependency in your build.gradle file.
1 2 |
implementation 'com.android.support:recyclerview-v7:25.3.1' implementation 'com.android.support:cardview-v7:27.0.2' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.example.exprv; public class Person { private String fName, lastName; public Person(String fName , String lastName ) { this.fName = fName; this.lastName=lastName; } public String getfName() { return fName; } public String getLastName() { return lastName; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/textViewName" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ff3847" android:padding="10dp" android:text="Iron Man" android:textAlignment="center" android:textAppearance="@style/Base.TextAppearance.AppCompat.Large.Inverse" /> <LinearLayout android:animateLayoutChanges="true" android:id="@+id/linearLayout" android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="15dp"> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="First Name " /> <TextView android:id="@+id/textViewFirstName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tony Stark" android:textStyle="bold" /> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Last Name " /> <TextView android:id="@+id/textViewLastName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="yadav" android:textStyle="bold" /> </TableRow> </TableLayout> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> </RelativeLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
package com.example.exprv; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.recyclerview.widget.RecyclerView; import java.util.List; /** * Created by Belal on 7/15/2017. */ public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> { private List<Person> personList; private Context context; private static int currentPosition = 0; public PersonAdapter(List<Person> personList, Context context) { this.personList = personList; this.context = context; } @Override public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout_persons, parent, false); return new PersonViewHolder(v); } @Override public void onBindViewHolder(finalPersonViewHolder holder, final int position) { Person person = personList.get(position); holder.textViewFirstName.setText(person.getfName()); holder.textViewLastName.setText(person.getLastName()); holder.linearLayout.setVisibility(View.GONE); //if the position is equals to the item position which is to be expanded if (currentPosition == position) { //toggling visibility holder.linearLayout.setVisibility(View.VISIBLE); } holder.textViewName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //getting the position of the item to expand it currentPosition = position; //reloding the list notifyDataSetChanged(); } }); } @Override public int getItemCount() { return personList.size(); } class PersonViewHolder extends RecyclerView.ViewHolder { TextView textViewFirstName, textViewLastName,textViewName; LinearLayout linearLayout; PersonViewHolder(View itemView) { super(itemView); textViewName = (TextView) itemView.findViewById(R.id.textViewName); textViewFirstName = (TextView) itemView.findViewById(R.id.textViewFirstName); textViewLastName = (TextView) itemView.findViewById(R.id.textViewLastName); linearLayout = (LinearLayout) itemView.findViewById(R.id.linearLayout); } } } |
If you have more details or questions, you can reply to the received confirmation email.
Back to Home
Be the first to comment.