Java Android App Development Course, Recycler View – List Screen Configuration

In Android app development, RecyclerView is a powerful UI widget that helps users efficiently view data in a list format. RecyclerView is suitable for displaying large amounts of data, as it is optimized in terms of performance and memory management. In this tutorial, we will explore the concept, structure, and how to create a list screen with RecyclerView through practical examples.

What is RecyclerView?

RecyclerView is an evolution of Android’s ListView, utilizing a continuously reusable view holder pattern to enhance scrolling performance. This ensures that UI components are kept in memory only when they are displayed on screen, and items that are not visible are released from memory to improve performance.

Components of RecyclerView

  • Adapter: It serves to connect data and views, creating view items and binding data to those views.
  • ViewHolder: An object that allows for the reuse of the views of each item and stores the state of the UI.
  • LayoutManager: Manages the positioning of items and supports vertical or horizontal scrolling.

Advantages of RecyclerView

  • Efficient memory usage: Minimizes memory usage through the view holder pattern.
  • Flexible layout: Can be configured in various layouts such as vertical, horizontal, or grid format.
  • Performance: Provides fast scrolling performance.

Implementing Basic Components of RecyclerView

1. Add Gradle Dependency

To use RecyclerView, you first need to add the dependency in the build.gradle file.

dependencies {
    implementation "androidx.recyclerview:recyclerview:1.2.1"
}

2. Create Layout File

Create an XML layout file for the activity or fragment where RecyclerView will be used.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

3. Create Data Model

Create a data model class to be used with RecyclerView.

public class Item {
    private String title;
    private String description;

    public Item(String title, String description) {
        this.title = title;
        this.description = description;
    }

    public String getTitle() {
        return title;
    }

    public String getDescription() {
        return description;
    }
}

4. Write Adapter Class

Write an adapter class to connect RecyclerView and the data model.

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;

public class ItemAdapter extends RecyclerView.Adapter {
    private final List itemList;

    public ItemAdapter(List itemList) {
        this.itemList = itemList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        Item currentItem = itemList.get(position);
        holder.title.setText(currentItem.getTitle());
        holder.description.setText(currentItem.getDescription());
    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        public final TextView title;
        public final TextView description;

        public ItemViewHolder(View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.item_title);
            description = itemView.findViewById(R.id.item_description);
        }
    }
}

5. Create Item Layout File

Create a layout file to display each item.

<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="16dp">

    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/item_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"/>

</LinearLayout>

6. Set Up RecyclerView in Main Activity

Finally, set up RecyclerView in the main activity and display the data.

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 itemAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        List itemList = new ArrayList<>();
        itemList.add(new Item("Item 1", "Description 1"));
        itemList.add(new Item("Item 2", "Description 2"));
        itemList.add(new Item("Item 3", "Description 3"));

        itemAdapter = new ItemAdapter(itemList);
        recyclerView.setAdapter(itemAdapter);
    }
}

Advanced Features of RecyclerView

1. Adding Item Click Listener

To handle item click events, you can add a click listener to the adapter.

public class ItemAdapter extends RecyclerView.Adapter {
    private final List itemList;
    private final OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(Item item);
    }

    public ItemAdapter(List itemList, OnItemClickListener listener) {
        this.itemList = itemList;
        this.listener = listener;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        Item currentItem = itemList.get(position);
        holder.title.setText(currentItem.getTitle());
        holder.description.setText(currentItem.getDescription());
        
        holder.itemView.setOnClickListener(v -> listener.onItemClick(currentItem));
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        public final TextView title;
        public final TextView description;

        public ItemViewHolder(View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.item_title);
            description = itemView.findViewById(R.id.item_description);
        }
    }
}

2. Adding and Removing Items

Let’s look at how to add and remove items from RecyclerView.

public void addItem(Item item) {
    itemList.add(item);
    notifyItemInserted(itemList.size() - 1);
}

public void removeItem(int position) {
    itemList.remove(position);
    notifyItemRemoved(position);
}

3. Adding Animation Effects

RecyclerView supports basic animations by default, but you can add custom animations to create more dynamic effects.

Conclusion

RecyclerView is one of the essential UI elements to understand in Android app development. Through this tutorial, we hope you grasped the basic concepts and implementation methods of RecyclerView. It allows for the efficient display of large amounts of data and enhances user experience through various features. We hope this helps with your Android app development.