Links & DependenciesExampleAdapter.ktMainActivity.ktactivity_main.xmlexample_item.xmlExampleItem.kt
RecyclerView & CardView dependencies:
developer.android.com/jetpack/androidx/releases/recyclerview
package com.codinginflow.recyclerviewexample 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 import kotlinx.android.synthetic.main.example_item.view.* class ExampleAdapter(private val exampleList: List<ExampleItem>) : RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExampleViewHolder { val itemView = LayoutInflater.from(parent.context).inflate(R.layout.example_item, parent, false) return ExampleViewHolder(itemView) } override fun onBindViewHolder(holder: ExampleViewHolder, position: Int) { val currentItem = exampleList[position] holder.imageView.setImageResource(currentItem.imageResource) holder.textView1.text = currentItem.text1 holder.textView2.text = currentItem.text2 } override fun getItemCount() = exampleList.size class ExampleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val imageView: ImageView = itemView.image_view val textView1: TextView = itemView.text_view_1 val textView2: TextView = itemView.text_view_2 } }
package com.codinginflow.recyclerviewexample import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.activity_main.* import kotlin.random.Random class MainActivity : AppCompatActivity() { private val exampleList = generateDummyList(500) private val adapter = ExampleAdapter(exampleList) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recycler_view.adapter = adapter recycler_view.layoutManager = LinearLayoutManager(this) recycler_view.setHasFixedSize(true) } fun insertItem(view: View) { val index = Random.nextInt(8) val newItem = ExampleItem( R.drawable.ic_android, "New item at position $index", "Line 2" ) exampleList.add(index, newItem) adapter.notifyItemInserted(index) } fun removeItem(view: View) { val index = Random.nextInt(8) exampleList.removeAt(index) adapter.notifyItemRemoved(index) } private fun generateDummyList(size: Int): ArrayList<ExampleItem> { val list = ArrayList<ExampleItem>() for (i in 0 until size) { val drawable = when (i % 3) { 0 -> R.drawable.ic_android 1 -> R.drawable.ic_audio else -> R.drawable.ic_sun } val item = ExampleItem(drawable, "Item $i", "Line 2") list += item } return list } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/buttons" android:clipToPadding="false" android:padding="4dp" tools:listitem="@layout/example_item" /> <LinearLayout android:id="@+id/buttons" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:clipToPadding="true" android:padding="4dp"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="insertItem" android:text="Insert item" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="removeItem" android:text="Remove item" /> </LinearLayout> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"> <ImageView android:id="@+id/image_view" android:layout_width="50dp" android:layout_height="50dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_android" /> <TextView android:id="@+id/text_view_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toEndOf="@id/image_view" android:text="Line 1" android:textColor="@android:color/black" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/text_view_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/text_view_1" android:layout_toEndOf="@id/image_view" android:text="Line 2" /> </RelativeLayout> </androidx.cardview.widget.CardView>
package com.codinginflow.recyclerviewexample data class ExampleItem(val imageResource: Int, val text1: String, val text2: String)