Teori Fragment
Fragment adalah salah satu bagian dari User Interface selain Activity. Bentuknya pun hampir sama dengan Activity, di mana ia memiliki class untuk kode logika dan tampilan XML. Bedanya yaitu kelasnya extends (inherit) ke Fragment dan tidak perlu didaftarkan ke dalam AndroidManifest.xml. Melalui Android Support Library, fragment bersifat kompatibel sampai Android API level 10 Gingerbread.
Salah satu alasan mengapa Anda harus menggunakan fragment yaitu Anda dapat membuat banyak tampilan tanpa berpindah-pindah Activity. Hal ini dapat dilakukan karena Fragment bersifat modular, sehingga satu activity bisa memiliki lebih dari satu fragment.
Selain itu Anda juga dapat memakai satu fragment dalam banyak Activity sekaligus (reusable). Keren kan? Analogi yang mendekati fragment pada platform lain adalah penggunaan komponen iframe pada aplikasi berbasis web. Untuk lebih jelasnya Anda dapat melihat gambar berikut:
Contoh penerapan fragment yang dapat Anda lihat yaitu pada aplikasi Gmail yang ada di Tablet.
List email adalah satu fragment tersendiri, dan detail email adalah fragment yang lain. Kedua fragment ini dapat ditampilkan secara berdampingan pada satu Activity yang sama. Jika ditampilkan pada layar yang berukuran kecil, fragment ini ditampilkan satu per satu.
Contoh penerapan fragment yang dapat Anda lihat yaitu pada aplikasi Gmail yang ada di Tablet.
List email adalah satu fragment tersendiri, dan detail email adalah fragment yang lain. Kedua fragment ini dapat ditampilkan secara berdampingan pada satu Activity yang sama. Jika ditampilkan pada layar yang berukuran kecil, fragment ini ditampilkan satu per satu.
Cara Menambahkan Fragment
Berikut adalah contoh kode untuk menambahkan fragment ke atas Activity:
- val fragmentManager = getSupportFragmentManager()
- val exampleFragment = ExampleFragment()
- fragmentManager
- .beginTransaction()
- .add(R.id.frame_container, exampleFragment)
- .addToBackStack(null)
- .commit()
- FragmentManager fragmentManager = getSupportFragmentManager();
- ExampleFragment exampleFragment = new ExampleFragment();
- fragmentManager
- .beginTransaction()
- .add(R.id.frame_container,exampleFragment)
- .addToBackStack(null)
- .commit();
Setelah menginisialisasi Fragment Manager, Anda melakukan beberapa aksi terhadap Fragment seperti add(), replace(), dan remove(). Kemudian untuk mengaplikasikannya, Anda harus memanggil fungsi commit(). Sebelumnya, Anda dapat menambahkan kode addToBackStack() untuk menyimpan transaksi terakhir ke back stack.
Back stack dapat diilustrasikan sebagai sbeuah tumpukan buku, di mana ketika Anda melakukan transaksi maka Anda menambahkan buku baru di atasnya, kemudian ketika Anda menekan tombol back, maka buku yang paling atas diambil. Bisa dibayangkan? Perlu diketahui juga bahwa yang disimpan di back stack ini bukan Fragment-nya, namun transaction-nya. Untuk lebih jelasnya, lihatlah gambar berikut:
Jika Anda menambahkan transaksi ke dalam back stack, maka ia disimpan di dalam back stack, sehingga ketika Anda menekan tombol back, maka activity akan memanggil transaksi sebelumnya. Nah, jika Anda tidak menyimpannya, maka yang terjadi yaitu aplikasi langsung kembali ke Activity.
Ada video bagus yang menjelaskan misteri penerapan back stack ini, Anda dapat melihatnya di sini:
Fragment Lifecycle
Fragment memiliki daur hidup sendiri dan bergantung penuh pada daur hidup activity dimana ia ditanamkan. Berikut ada beberapa state yang perlu kita ketahui sebelum menggunakan fragment.
- Resumed
Fragment bisa dilihat ketika activity sedang berjalan. - PausedKetika ada activity lain yang menutupi sebagian dari activity dimana fragment ditambahkan. Yang dimaksud menutupi sebagian adalah ketika activity-nya tidak tertutup sepenuhnya oleh activity lain. Jadi masih ada bagian dari activity yang masih bisa bisa dilihat di layar.
- Stopped
Ketika fragment tidak kelihatan di layar. Bisa jadi karena activity dimana fragment itu ditambahkan berhenti atau bahkan fragment itu sendiri sudah dihapus dari activity. Pada kondisi ini fragment masih hidup dengan semua informasinya. Akan tetapi sudah tidak kelihatan di layar dan akan dihancurkan.
Skema di bawah ini menunjukkan callback method apa saja yang akan dipanggil di dalam fragment ketika terjadi perubahan pada sebuah activity.
Skema di atas menunjukkan bahwa perubahan state dari sebuah activity akan mempengaruhi life cycle dari sebuah fragment. Ini karena fragment merupakan komponen view yang bisa ditambahkan (embed) ke dalam activity.
Untuk tahu lebih detail tentang fragment, silakan kamu pahami baik-baik materi di tautan berikut: