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