📄 src/Adapters/FolderListAdapter.cs
using Android.Views;
using AndroidX.RecyclerView.Widget;
using NotesApp.Models;

namespace NotesApp.Adapters;

public class FolderListAdapter(Action<DriveFolderItem> onFolderTapped) : RecyclerView.Adapter
{
    private List<DriveFolderItem> _items = [];

    public override int ItemCount => _items.Count;

    public void SetItems(List<DriveFolderItem> items)
    {
        _items = items;
        NotifyDataSetChanged();
    }

    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        var view = LayoutInflater
            .From(parent.Context)!
            .Inflate(Resource.Layout.row_folder, parent, false)!;
        return new FolderViewHolder(view, onFolderTapped);
    }

    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) =>
        ((FolderViewHolder)holder).Bind(_items[position]);

    private class FolderViewHolder : RecyclerView.ViewHolder
    {
        private readonly TextView _nameView;
        private readonly Action<DriveFolderItem> _onFolderTapped;
        private DriveFolderItem? _item;

        public FolderViewHolder(View itemView, Action<DriveFolderItem> onFolderTapped)
            : base(itemView)
        {
            _nameView = itemView.FindViewById<TextView>(Resource.Id.folder_name)!;
            _onFolderTapped = onFolderTapped;
            itemView.Click += (_, _) =>
            {
                if (_item != null)
                    _onFolderTapped(_item);
            };
        }

        public void Bind(DriveFolderItem item)
        {
            _item = item;
            _nameView.Text = item.Name;
        }
    }
}