RecyclerView
is a powerful and flexible Android widget used to display large sets of data efficiently. Unlike ListView
, it reuses views using the ViewHolder pattern and allows advanced features like animations and custom layouts.
Step 1: Add RecyclerView Dependency
Open your build.gradle (Module: app)
and add the RecyclerView library:

dependencies { implementation 'androidx.recyclerview:recyclerview:1.4.0' }
Sync the project.
Step 2: Create the RecyclerView in XML Layout
In your activity or fragment layout XML file:

<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp" android:clipToPadding="false" tools:listitem="@layout/item_row" />
Step 3: Create Item Layout (item_row.xml)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="12dp"> <TextView android:id="@+id/textViewItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="List Item" android:textSize="18sp" /> </LinearLayout>
Step 4: Create a Model Class (e.g., ItemModel.java
)

public class ItemModel { private String itemText; public ItemModel(String itemText) { this.itemText = itemText; } public String getItemText() { return itemText; } }
Step 5: Create Adapter Class (ItemAdapter.java
)

import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> { private List<ItemModel> itemList; public ItemAdapter(List<ItemModel> itemList) { this.itemList = itemList; } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textViewItem; public ViewHolder(View view) { super(view); textViewItem = view.findViewById(R.id.textViewItem); } } @Override public ItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_row, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { ItemModel item = itemList.get(position); holder.textViewItem.setText(item.getItemText()); } @Override public int getItemCount() { return itemList.size(); } }
Step 6: Set Up RecyclerView in Your Activity


import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private ItemAdapter adapter; private List<ItemModel> itemList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); itemList = new ArrayList<>(); itemList.add(new ItemModel("Apple")); itemList.add(new ItemModel("Banana")); itemList.add(new ItemModel("Cherry")); adapter = new ItemAdapter(itemList); recyclerView.setAdapter(adapter); } }
Optional: Add Click Listener (in ItemAdapter.java
)
use Context
You can enhance user interaction by adding an interface for item clicks.

import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> { Context context; private List<ItemModel> itemList; public ItemAdapter(Context context, List<ItemModel> itemList) { this.itemList = itemList; this.context = context; } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textViewItem; public ViewHolder(View view) { super(view); textViewItem = view.findViewById(R.id.textViewItem); } } @NonNull @Override public ItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_row, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { ItemModel item = itemList.get(position); holder.textViewItem.setText(item.getItemText()); holder.textViewItem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(context) .setTitle(item.getItemText()) .setMessage("You have chosen "+item.getItemText()) .setNegativeButton("OK", null) .show(); } }); } @Override public int getItemCount() { return itemList.size(); } }
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private ItemAdapter adapter; private List<ItemModel> itemList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); itemList = new ArrayList<>(); itemList.add(new ItemModel("Apple")); itemList.add(new ItemModel("Banana")); itemList.add(new ItemModel("Cherry")); adapter = new ItemAdapter(this, itemList); recyclerView.setAdapter(adapter); } }
Conclusion
You’ve now successfully implemented a basic RecyclerView
for displaying a list in Java using Android Studio. You can further improve it by adding features like item click events, animations, pagination, or integrating data from APIs or databases.