How to Optimize RecyclerView performance by implementing the ViewHolder

Mikekelvin 0 Tallied Votes 38 Views Share

When working with RecyclerView, always utilize the ViewHolder pattern to improve performance by minimizing the number of findViewById() calls.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }

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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText("Item " + position);
    }

    @Override
    public int getItemCount() {
        return 100; // Example size, use your actual data size here
    }
}

By caching references to views in the ViewHolder, you avoid repeatedly calling findViewById() in onBindViewHolder(), resulting in smoother scrolling and improved efficiency.

Context: The ViewHolder pattern is crucial in Android development, especially when dealing with RecyclerViews. It's included here because optimizing RecyclerView performance is a common concern for Android developers. Without ViewHolder, each call to findViewById() in onBindViewHolder() can lead to performance issues, especially with large datasets. Implementing this pattern significantly enhances app responsiveness and user experience.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    
    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        
        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }

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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText("Item " + position);
    }

    @Override
    public int getItemCount() {
        return 100; // Example size, use your actual data size here
    }
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.