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

namespace NotesApp.Adapters;

public class NoteListAdapter : RecyclerView.Adapter
{
    private List<NoteCacheEntry> _items = [];

    public override int ItemCount => _items.Count;

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

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

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

    private class NoteViewHolder : RecyclerView.ViewHolder
    {
        private readonly TextView _nameView;
        private readonly TextView _previewView;

        public NoteViewHolder(View itemView)
            : base(itemView)
        {
            _nameView = itemView.FindViewById<TextView>(Resource.Id.note_name)!;
            _previewView = itemView.FindViewById<TextView>(Resource.Id.note_preview)!;
        }

        public void Bind(NoteCacheEntry entry)
        {
            _nameView.Text = entry.Name;
            _previewView.Text = entry.Preview;
        }
    }
}