© Khmer Angkor Academy - sophearithput168

RecyclerView

RecyclerView - Efficient List Display

RecyclerView គឺជា advanced widget សម្រាប់បង្ហាញ large datasets ប្រកបដោយ performance ខ្ពស់។ វាជា improved version នៃ ListView ដែលផ្តល់ flexibility និង efficiency កាន់តែច្រើន។

🆚 RecyclerView vs ListView

Feature ListView RecyclerView
ViewHolder Optional (manual) ✅ Mandatory (enforced pattern)
Layout Manager Vertical list only ✅ Linear, Grid, Staggered
Item Animations None (manual) ✅ Built-in (add, remove, move)
Item Decoration Dividers only ✅ Custom decorations
Performance ⚠️ Moderate ✅ Excellent (optimized recycling)
Flexibility ⚠️ Limited ✅ Highly customizable

♻️ View Recycling Mechanism

RecyclerView recycles views ដើម្បី save memory និង improve performance:

[Screen displays 10 items]

┌─────────────────────────────┐
│   📱 Visible Area (Screen)  │
│                             │
│  [Item 1] ← ViewHolder #1   │  ┐
│  [Item 2] ← ViewHolder #2   │  │
│  [Item 3] ← ViewHolder #3   │  │
│  [Item 4] ← ViewHolder #4   │  ├─ Visible items (on screen)
│  [Item 5] ← ViewHolder #5   │  │
│  [Item 6] ← ViewHolder #6   │  │
│  [Item 7] ← ViewHolder #7   │  │
│  [Item 8] ← ViewHolder #8   │  │
│  [Item 9] ← ViewHolder #9   │  │
│  [Item 10] ← ViewHolder #10 │  ┘
└─────────────────────────────┘
       ↓ User scrolls down ↓

┌─────────────────────────────┐
│  [Item 2] ← ViewHolder #2   │  ┐
│  [Item 3] ← ViewHolder #3   │  │
│  [Item 4] ← ViewHolder #4   │  │
│  [Item 5] ← ViewHolder #5   │  ├─ Same ViewHolders
│  [Item 6] ← ViewHolder #6   │  │  (recycled!)
│  [Item 7] ← ViewHolder #7   │  │
│  [Item 8] ← ViewHolder #8   │  │
│  [Item 9] ← ViewHolder #9   │  │
│  [Item 10] ← ViewHolder #10 │  │
│  [Item 11] ← ViewHolder #1  │  ┘ ← RECYCLED! (was Item 1)
└─────────────────────────────┘

Item 1 scrolled off screen
  → ViewHolder #1 recycled
  → Reused for Item 11!
  
💡 RecyclerView only creates ~12 ViewHolders
   for a list of 1000 items!

✨ Memory Efficiency: បើ list មាន 1000 items ប៉ុន្តែ screen បង្ហាញតែ 10 items, RecyclerView creates ~12-15 ViewHolders only (not 1000!)។ ViewHolders ទាំងនោះ recycle រហូត!

🏗️ RecyclerView Architecture (4 Components)

Component តួនាទី Responsibility
1️⃣ RecyclerView Container widget • Display list on screen
• Manage scrolling
• Coordinate adapter & layout manager
2️⃣ Adapter Data → Views • Hold data source (List, Array)
• Create ViewHolders
• Bind data to views
3️⃣ ViewHolder View cache • Hold references to views (findViewById)
• Prevent repeated findViewById() calls
• Improve performance
4️⃣ LayoutManager Position items • Determine item positions
• Handle scrolling behavior
• Types: Linear, Grid, Staggered

📐 LayoutManager Types

LayoutManager ទម្រង់ Use Case
LinearLayoutManager Vertical or Horizontal list News feed, Chat messages, Settings
GridLayoutManager Grid (rows × columns) Photo gallery, Product catalog
StaggeredGridLayoutManager Staggered grid (Pinterest-like) Pinterest layout, Masonry grid

⚡ ViewHolder Pattern (Design Pattern)

ViewHolder pattern គឺជា design pattern ដើម្បី cache view references និង improve performance:

Without ViewHolder:
  getView() called for each scroll
    → findViewById() called repeatedly  ❌ SLOW!
    → Search view tree every time
    → 1000 items = 1000+ findViewById() calls

With ViewHolder:
  ViewHolder created once
    → findViewById() called ONCE per ViewHolder  ✅ FAST!
    → References cached in ViewHolder
    → 1000 items = ~12 findViewById() calls only!
    
Performance gain: 50-100x faster scrolling! 🚀
Java Code
Click "Run" to execute the Java code