Android Tutorial
Software Setup and Configuration
Android Studio
File Structure
Components
Core Topics
Layout
View
Button
Intent and Intent Filters
Toast
RecyclerView
Fragments
Adapters
Other UI Component
Image Loading Libraries
Date and Time
Material Design
Bars
Working with Google Maps
Chart
Animation
Database
Advance Android
Jetpack
Architecture
App Publish
App Monetization
RecyclerView
is a powerful UI component that lets you display a scrollable list of items, which can be in a grid, linear list, or other layouts. Here's a basic example of how to implement a RecyclerView
to display a list of strings:
In your app module's build.gradle
file, add the following:
implementation 'androidx.recyclerview:recyclerview:1.x.x' // replace x.x with the latest version
In your activity or fragment layout (activity_main.xml
):
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/>
list_item.xml
):<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:textSize="18sp" />
RecyclerView
:Create a Kotlin file named MyAdapter.kt
:
import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView class MyAdapter(private val myList: List<String>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() { class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val textView: TextView = itemView.findViewById(R.id.textView) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val itemView = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false) return MyViewHolder(itemView) } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val currentItem = myList[position] holder.textView.text = currentItem } override fun getItemCount() = myList.size }
RecyclerView
in your activity:In MainActivity.kt
:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView class MainActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var myAdapter: MyAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val myList = listOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5") recyclerView = findViewById(R.id.recyclerView) recyclerView.layoutManager = LinearLayoutManager(this) myAdapter = MyAdapter(myList) recyclerView.adapter = myAdapter } }
This sets up a basic RecyclerView
to display a list of strings. There are more features and functionalities you can add, such as ViewHolder
click listeners, different layouts, animations, etc.
RecyclerView in Android Kotlin example:
Include the RecyclerView in your XML layout:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/>
In your Kotlin code, set up the RecyclerView with a layout manager and adapter:
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.adapter = MyAdapter(dataList)
Creating a simple RecyclerView in Android:
Create a layout for each item (e.g., item_layout.xml
). Create an adapter that inflates this layout:
class MyAdapter(private val dataList: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_layout, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { // Bind data to views holder.itemView.findViewById<TextView>(R.id.textView).text = dataList[position] } override fun getItemCount(): Int { return dataList.size } }
Android RecyclerView adapter and ViewHolder example:
The adapter binds data to the views and the ViewHolder holds references to the views:
class MyAdapter(private val dataList: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { // Inflate item layout and return ViewHolder } override fun onBindViewHolder(holder: ViewHolder, position: Int) { // Bind data to views } override fun getItemCount(): Int { return dataList.size } }
Adding click events to RecyclerView items in Android:
Implement click events in the onBindViewHolder
method:
override fun onBindViewHolder(holder: ViewHolder, position: Int) { val item = dataList[position] holder.itemView.setOnClickListener { // Handle item click Toast.makeText(holder.itemView.context, "Clicked: $item", Toast.LENGTH_SHORT).show() } }
Customizing RecyclerView layout in Android:
Customize the layout manager for different arrangements:
recyclerView.layoutManager = GridLayoutManager(this, 2) // or recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
Swipe to delete in RecyclerView Android example:
Implement swipe-to-delete using an ItemTouchHelper:
val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback( 0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT ) { override fun onMove( recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder ): Boolean { return false } override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { // Handle swipe (e.g., remove item from the list) } }) itemTouchHelper.attachToRecyclerView(recyclerView)
CardView with RecyclerView in Android Kotlin:
Include the CardView dependency and use it in the item layout:
<androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="4dp"> <!-- Your item layout goes here --> </androidx.cardview.widget.CardView>
Filtering data in RecyclerView Android example:
Implement filtering in your adapter:
class MyAdapter(private val originalData: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>(), Filterable { private var filteredData: List<String> = originalData override fun getFilter(): Filter { return object : Filter() { override fun performFiltering(constraint: CharSequence?): FilterResults { val filterResults = FilterResults() val query = constraint.toString().toLowerCase(Locale.getDefault()) filteredData = if (query.isEmpty()) { originalData } else { originalData.filter { it.toLowerCase(Locale.getDefault()).contains(query) } } filterResults.values = filteredData return filterResults } override fun publishResults(constraint: CharSequence?, results: FilterResults?) { filteredData = results?.values as List<String> notifyDataSetChanged() } } } // Rest of the adapter implementation remains the same }