Pertemuan 8

Menampilkan Daftar
Data Dinamis 📜

Pernah penasaran bagaimana Instagram atau TikTok bisa men-scroll ribuan postingan tanpa bikin HP-mu hang atau crash? Rahasianya ada di teknik daur ulang memori: RecyclerView!

1. Kenapa Nggak Pakai ScrollView Biasa?

Bayangkan kamu punya aplikasi kontak dengan 10.000 nama. Kalau kamu pakai ScrollView dan LinearLayout biasa, Android akan menggambar (nge-render) ke-10.000 nama itu secara bersamaan ke dalam memori RAM, walaupun yang kelihatan di layar cuma 5 nama!

Hasilnya? OOM (Out of Memory). Aplikasimu langsung Force Close!

Solusinya: Konsep Daur Ulang

RecyclerView bekerja cerdas. Dia hanya memuat elemen yang terlihat di layar + beberapa cadangan di baliknya. Saat kamu nge-scroll ke bawah, elemen yang sudah lewat di atas akan dilepas, dibersihkan datanya, lalu dipindah ke bawah untuk digunakan oleh data baru! Memori yang terpakai tetap stabil.

Dibuang
Item Terlihat
Item Terlihat
Item Terlihat
Item Terlihat
Didaur Ulang

Simulasi Recycling Element

2. Lima Pilar (Anatomi RecyclerView)

1. Model Data

Bahan bakunya. Biasanya berupa ArrayList berisi Class Object Java (Contoh: Kumpulan data Kopi yang berisi Nama, Harga, Foto).

2. Item Layout (XML)

File XML terpisah khusus untuk mendesain SATU BARIS item saja (cetakan desainnya). Nanti desain ini akan di-copy-paste otomatis oleh sistem.

3. RecyclerView (UI)

Komponen kosong yang ditaruh di activity_main.xml. Dia hanya bertugas sebagai wadah (container) tempat list-nya akan ditampilkan.

4. Layout Manager

Sang Mandor. Mengatur apakah barisan item tadi mau disusun lurus ke bawah (Linear), ke samping, atau kotak-kotak (Grid).

5. Adapter & ViewHolder (The Core)

Ini dia si pekerja keras (File Java). ViewHolder bertugas mencari ID komponen XML (findViewById), sedangkan Adapter adalah perantaranya. Dialah yang mengambil Data dari sumber, lalu memasukkannya satu-satu ke dalam cetakan ViewHolder secara berulang-ulang.

3. Simulator LayoutManager

Kekuatan LayoutManager

Hebatnya RecyclerView, kita tidak perlu mengubah desain item-nya. Cukup ubah LayoutManager-nya, maka wujud aplikasimu akan berubah total! Coba klik mode di bawah ini:

// Kode Java-nya:
rvKopi.setLayoutManager(new LinearLayoutManager(this));

Menu Minuman

4. Alur Kerja & View Lifecycle

A. Bagaimana 5 File Tersebut Bekerja Sama?

Jangan bingung dengan banyaknya file. Pahami saja alur sederhananya seperti sebuah pabrik perakitan mobil:

Kopi.java (Data) item.xml (Desain)

Bahan Baku

KopiAdapter.java

Pabrik Perakitan

activity_main.xml MainActivity.java

Tampil di Layar


B. Apakah Ada Kaitannya dengan Android Lifecycle?

Tentu saja! Tapi bukan Activity Lifecycle, melainkan View Lifecycle di dalam Adapter. Proses ini dirancang untuk sangat menghemat RAM dan Baterai.

1. onCreateViewHolder()

Proses Berat: Mirip dengan onCreate() di Activity. Di sinilah Android membedah file XML menjadi objek nyata (Inflate).

Efisiensinya: Sistem HANYA akan memanggil fungsi ini beberapa kali di awal (misalnya 7 kali jika layarmu hanya muat 5 item + 2 cadangan). Setelah itu, fungsi ini tidak akan pernah dipanggil lagi meski kamu nge-scroll 10.000 data!

2. onBindViewHolder()

Proses Ringan: Mirip dengan onResume(). Di sinilah tugas mengganti teks dan foto terjadi.

Efisiensinya: Saat kamu nge-scroll bawah, item yang menghilang di atas akan masuk ke Recycle Pool (bukan dibunuh/destroy). Sistem mengambil cetakan kosong itu, lalu HANYA memanggil onBindViewHolder() untuk mengganti isi teksnya dengan data yang baru. Sangat cepat!

5. Bedah Kode (The Core)

Membuat RecyclerView memang butuh persiapan banyak file. Supaya tidak tersesat, ikuti urutan tab di bawah ini dari kiri ke kanan saat coding di Android Studio!

Info File: activity_main.xml

Untuk Apa?

Layar (Wadah) Utama Aplikasi.

Fungsinya

Tempat menaruh komponen RecyclerView kosong (sebagai etalase) yang siap diisi daftar data.

Cara Buat

Otomatis ada saat kamu membikin Project baru (Empty Views Activity).

<!-- activity_main.xml (Wadah Utama) -->
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Pasang komponen RecyclerView. Biarkan kosong, dia akan diisi dari Java nanti! -->
    <!-- Praktik Terbaik ConstraintLayout: Gunakan 0dp dan ikat 4 sisinya! -->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvKopi"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

6. Spill Dunia Kerja: Narik Data API

Kalo Datanya Ada 10.000 Biji, Masa Diketik Manual?

Di modul ini kita memang ngetik manual pakai listData.add(...) buat latihan. Tapi tenang aja, di dunia kerja (kayak pas kamu bikin Tokopedia atau Gojek), ribuan data itu ditarik otomatis dari Server/Internet dalam bentuk JSON!

Namun, Android punya Aturan Main super ketat soal internet. Biar nggak bingung, mari kita kenalan dulu dengan istilah-istilah wajib di bawah ini:

A. Kenalan Sama Istilahnya Dulu 🤝

1. Apa itu UI Thread?

Analogi: KASIR TOKO.
UI Thread (Main Thread) adalah jalur utama aplikasi. Tugasnya Kasir cuma satu: nyapa pelanggan, nampilin tombol, dan nerima ketikan/klik. Kasir harus selalu senyum (responsif).

2. Background Thread?

Analogi: PEGAWAI GUDANG.
Jalur belakang layar. Segala hal yang berat (narik data internet, ngolah database, download foto 100MB) WAJIB diserahkan ke Pegawai Gudang, biar Kasir di depan nggak kelabakan ngelayanin user.

3. Retrofit & Volley?

Analogi: JASA KURIR (GoSend/J&T).
Ini adalah Library (Pustaka Pihak Ketiga). Daripada nulis kode Background Thread manual yang pusing, kita mending "menyewa" jasa kurir. Kita tinggal kasih URL API-nya, si Retrofit bakal ngurusin koneksinya otomatis!

B. Tiga Aturan Ketat Android ⚠️

1. Wajib Izin Internet

Aplikasi akan langsung ditolak sistem jika kamu lupa menambahkan baris kode <uses-permission...> di dalam file AndroidManifest.xml.

2. Haram di UI Thread

Kamu TIDAK BOLEH mendownload data internet di jalur utama aplikasi (UI Thread) karena akan membuat HP hang/freeze dan memicu error NetworkOnMainThreadException. Wajib pakai Background Thread / Library!

3. Notify Data Changed

Setelah data dari internet berhasil ditangkap dan dimasukkan ke `ArrayList`, kamu WAJIB melapor ke si pekerja keras dengan perintah adapter.notifyDataSetChanged() agar layarnya di-refresh.

C. Simulator: Kasir (UI) vs Kurir Retrofit (Background)

Kasir (UI Thread)

Ngatur layar & tombol

Standby (Lancar)

Kurir Retrofit (Background)

Kerja jalur belakang

Nganggur

Jangan Panik Dulu! 😅

Kode di bawah ini cuma bayangan/ilustrasi aja biar kalian tahu gimana alur kerjanya nanti. Cara coding Retrofit dan narik data API secara utuh baru akan kita pelajari khusus di pertemuan-pertemuan nanti! Hari ini, kita fokus menguasai RecyclerView-nya dulu aja ya.

BAYANGAN KODE ASLINYA
// 1. Nulis kode Background Thread dari nol itu ribet.
// Jadi Programmer Android nyewa "Jasa Kurir Ekspres" bernama RETROFIT!

public void tarikDataPakaiKurir() {
    // Wajib minta Izin Internet di AndroidManifest.xml dlu ya!
    // Kurir (Retrofit) otomatis lari ke Internet, Kasir (UI) tetep lancar!
    KurirRetrofit.get("https://api.namaserver.com/kopi", new Callback() {
        public void onPaketSampai(String jsonResponse) {

            // 2. Urai teks JSON-nya (Looping 10.000x otomatis!)
            JSONArray arr = new JSONArray(jsonResponse);
            for (int i = 0; i < arr.length(); i++) {
                JSONObject obj = arr.getJSONObject(i);
                listData.add(new Kopi(
                    obj.getString("nama_kopi"),
                    obj.getString("harga"),
                    R.drawable.ic_default // Nanti kalian bakal belajar library GLIDE buat gambar!
                ));
            }

            // 3. WAJIB TERIAK: Hei Adapter, ada data baru masuk! Tolong refresh layarnya!
            adapter.notifyDataSetChanged();
        }
    });
}

7. Tugas Implementasi (Challenge)

Pusing lihat kode Adapter di atas? Wajar! Semua developer Android juga merasakannya di awal. Cara mengalahkannya adalah dengan praktik langsung!

Misi Pahlawan Super:

  1. Buat project baru. Implementasikan RecyclerView untuk menampilkan "Daftar Pahlawan Nasional" atau "Daftar Tokoh Favoritmu" (Minimal 10 data).
  2. Kali ini, siapkan gambar (foto tokoh) minimal 3 yang berbeda dan masukkan ke folder res/drawable.
  3. Buat item_row.xml secantik mungkin menggunakan CardView agar melengkung rapi.
  4. Tantangan Tambahan: Coba ganti `LinearLayoutManager` menjadi `GridLayoutManager(this, 2)` di file Java-mu dan lihat perubahannya!
  5. Run aplikasinya di emulator (atau di HP Asli). Pastikan bisa di-scroll. Screenshot hasilnya! 📸