#add dependencies dependencies{ // for adding recyclerview implementation 'androidx.recyclerview:recyclerview:1.2.0' // for adding cardview implementation 'androidx.cardview:cardview:1.0.0' } #activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" tools:itemCount="5" tools:listitem="@layout/card_view_design" /> </LinearLayout> #new resource layout (card_view_design.xml) <?xml version="1.0" encoding="utf-8"?> <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="50dp" android:layout_margin="10dp" app:cardElevation="6dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp"> <ImageView android:id="@+id/imageview" android:layout_width="40dp" android:layout_height="40dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="15dp" android:text="Item" android:textSize="20sp" android:textStyle="bold" /> </LinearLayout> </androidx.cardview.widget.CardView> #new class Go to app > java > package name > right-click > New > Kotlin class/file data class ItemsViewModel(val image: Int, val text: String) { } #custom Adapter class import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView class CustomAdapter(private val mList: List<ItemsViewModel>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() { // create new views override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { // inflates the card_view_design view // that is used to hold list item val view = LayoutInflater.from(parent.context) .inflate(R.layout.card_view_design, parent, false) return ViewHolder(view) } // binds the list items to a view override fun onBindViewHolder(holder: ViewHolder, position: Int) { val ItemsViewModel = mList[position] // sets the image to the imageview from our itemHolder class holder.imageView.setImageResource(ItemsViewModel.image) // sets the text to the textview from our itemHolder class holder.textView.text = ItemsViewModel.text } // return the number of the items in the list override fun getItemCount(): Int { return mList.size } // Holds the views for adding it to image and text class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView) { val imageView: ImageView = itemView.findViewById(R.id.imageview) val textView: TextView = itemView.findViewById(R.id.textView) } } ----main activity.kt------ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // getting the recyclerview by its id val recyclerview = findViewById<RecyclerView>(R.id.recyclerview) // this creates a vertical layout Manager recyclerview.layoutManager = LinearLayoutManager(this) // ArrayList of class ItemsViewModel val data = ArrayList<ItemsViewModel>() // This loop will create 20 Views containing // the image with the count of view for (i in 1..20) { data.add(ItemsViewModel(R.drawable.ic_baseline_folder_24, "Item " + i)) } // This will pass the ArrayList to our Adapter val adapter = CustomAdapter(data) // Setting the Adapter with the recyclerview recyclerview.adapter = adapter } } ----for grid view only change line 130, recyclerview.layoutManager = GridLayoutManager(this,2) ----If any issue while running check manifest---- <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dynamicphotoframe"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.DynamicPhotoFrame"> <activity android:name=".MainActivity" android:exported="true" > <intent-filter android:exported="true"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>