Fragment — komponen UI yang dapat digunakan kembali di Android, yang ditanamkan ke dalam Activity dan dikelola melalui FragmentManager. Setiap fragmen memiliki siklus hidup, layout, dan status sendiri. Fragment menyederhanakan adaptasi ke berbagai ukuran layar dan penggunaan kembali kode. Baca selengkapnya di panduan resmi Google.
Poin utama
Fragment — komponen antarmuka pengguna Android modular yang mewakili bagian layar di dalam Activity. Fragment dapat mengelola layout sendiri, memproses peristiwa siklus hidup, dan menyimpan statusnya. Berkat modularitas, satu fragmen dapat digunakan di Activity yang berbeda dan pada perangkat yang berbeda.
Fragment API muncul di Android 3.0 (Honeycomb, API 11) tahun 2011 untuk mendukung tablet. Sebelumnya, pengembang harus membuat Activity terpisah untuk telepon dan tablet. Fragment memungkinkan menyusun layar dari blok independen. Pada tahun 2019, Google merilis pustaka Jetpack Fragment dengan kompatibilitas mundur hingga API 4.
Menurut data Google (2026), 80% aplikasi di Google Play menggunakan Fragment dalam berbagai bentuk. Pustaka Jetpack Fragment telah diunduh lebih dari 10 miliar kali melalui Google Play Services. Fragment tetap menjadi komponen kunci arsitektur Android bahkan di era Jetpack Compose.
Siklus hidup Fragment lebih kompleks daripada Activity, karena bergantung pada status Activity induk. Fragment melalui status yang sama dengan Activity, tetapi menambahkan callback sendiri: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.
| Callback Fragment | Padanan Activity | Tujuan |
|---|---|---|
| onAttach | sebelum onCreate | Fragment terikat ke Activity |
| onCreate | onCreate | Inisialisasi data yang tidak terkait UI |
| onCreateView | onCreate | Membuat layout melalui inflater |
| onViewCreated | onCreate | Mengikat elemen UI setelah view dibuat |
| onDestroyView | onDestroy | Menghapus view, membebaskan sumber daya UI |
| onDetach | onDestroy | Fragment terlepas dari Activity |
Perbedaan utama siklus hidup Fragment — pemanggilan onCreateView dan onDestroyView antara onCreate dan onDestroy. Fragment dapat ada tanpa UI (jika onCreateView mengembalikan null). Setelah Activity dibuat ulang, FragmentManager memulihkan fragmen secara otomatis.
FragmentManager — kelas pusat untuk mengelola fragmen di Activity. Bertanggung jawab untuk menambah, menghapus, mengganti fragmen, mengelola back stack, dan memulihkan status. FragmentManager dapat diakses melalui supportFragmentManager (AndroidX) atau fragmentManager (API lama).
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Jika fragmen belum ditambahkan — kita buat
if (savedInstanceState == null) {
val transaction = this.supportFragmentManager
.beginTransaction()
transaction.add(R.id.fragment_container, ListFragment())
transaction.addToBackStack(null)
transaction.commit()
}
}
fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.commit()
}
}Transaksi FragmentTransaction — bersifat atomik. commit() menjadwalkan eksekusi pada siklus Looper berikutnya. Untuk eksekusi segera, gunakan commitNow(). addToBackStack(null) menambahkan transaksi ke stack kembali — tombol «Kembali» akan membatalkan operasi.
Mari kita lihat metode kunci siklus hidup Fragment dengan contoh di Kotlin. onCreateView membuat layout — tidak seperti Activity, metode harus mengembalikan View. onViewCreated dipanggil segera setelahnya, di sini aman untuk mencari elemen berdasarkan id. onDestroyView — momen terakhir untuk membersihkan referensi ke view.
class DetailFragment : Fragment() {
private var _binding: FragmentDetailBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentDetailBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textTitle.setText("Detail")
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}Pola View Binding dengan _binding/binding memastikan bahwa setelah onDestroyView referensi ke layout di-null-kan. Mengakses binding setelah view dihancurkan akan menyebabkan NullPointerException. Pola ini direkomendasikan Google untuk semua fragmen.
Untuk mentransfer data antar fragmen, Android menawarkan beberapa mekanisme. Yang paling andal — ViewModel bersama, yang dibagi antar fragmen dari satu Activity. Fragment Result API cocok untuk peristiwa satu kali. Argumen Bundle — untuk data saat pembuatan fragmen.
// ViewModel bersama untuk dua fragmen
class SharedViewModel : ViewModel() {
private val _selectedItem = MutableLiveData<Item>()
val selectedItem: LiveData<Item> = _selectedItem
fun select(item: Item) { _selectedItem.setValue(item) }
}
// Fragment A: mengirim peristiwa melalui Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))
// Fragment B: menerima peristiwa
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
val value = bundle.getString("key")
}Fragment Result API (ditambahkan di Fragment 1.3.0) menggantikan setTargetFragment/onActivityResult yang usang. API ini type-safe, menggunakan Bundle, dan tidak memerlukan pengetahuan tentang penerima. Parent FragmentManager bertindak sebagai perantara antar fragmen.
Pilihan antara Fragment dan Activity tergantung pada arsitektur aplikasi. Fragment wajib untuk layout adaptif (telepon + tablet), untuk animasi transisi kustom, dan untuk penggunaan Jetpack Navigation. Activity lebih disukai untuk aplikasi sederhana dengan satu-dua layar.
| Kriteria | Fragment | Activity |
|---|---|---|
| Kecepatan pembuatan | Lebih cepat (komponen ringan) | Lebih lambat (proses sistem) |
| Penggunaan kembali | Tinggi (satu fragmen di Activity berbeda) | Rendah (setiap layar — Activity sendiri) |
| Animasi transisi | Fleksibel (FragmentTransaction) | Terbatas (overridePendingTransition) |
| Penyimpanan saat rotasi | Otomatis (manajer memulihkan) | Manual (onSaveInstanceState) |
| Deep Links | Melalui Navigation Component | Dukungan native melalui intent-filter |
Pendekatan modern untuk bekerja dengan Fragment — Jetpack Navigation Component, yang menggantikan manajemen manual FragmentManager. Pustaka ini menyediakan NavGraph (graf navigasi XML), NavHostFragment, dan Safe Args untuk transfer data type-safe.
Pustaka Jetpack Fragment (androidx.fragment:fragment-ktx) mencakup FragmentResult API, DialogFragment, BottomSheetDialogFragment, dan integrasi dengan komponen Lifecycle-aware. Sejak 2026, Google merekomendasikan penggunaan Fragment hanya melalui Jetpack Navigation, bukan secara langsung.
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:startDestination="@+id/listFragment">
<fragment
android:id="@+id/listFragment"
android:name=".ListFragment"
android:label="Daftar">
<action
android:id="@+id/action_list_to_detail"
app:destination="@+id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name=".DetailFragment"
android:label="Detail" />
</navigation>Pertanyaan yang sering diajukan
FragmentManager — kelas yang mengelola transaksi fragmen. Ia menambah, menghapus, mengganti fragmen dalam wadah Activity. FragmentManager memulihkan status fragmen saat Activity dibuat ulang dan mengelola back stack.
Fragment — bagian UI di dalam Activity, tidak dapat berdiri sendiri. Fragment bertahan dari pembuatan ulang Activity saat rotasi layar. Activity — layar lengkap dengan Lifecycle sendiri, Fragment bergantung pada Lifecycle Activity.
Fragment — ketika layar terdiri dari beberapa blok independen (tab, master-detail, adaptasi untuk tablet). Activity — ketika layar tidak memiliki blok berulang. Google merekomendasikan Single Activity + banyak Fragment.
Tiga cara: melalui Activity induk (ViewModel bersama), melalui Fragment Result API (setFragmentResult), melalui argumen Bundle saat membuat Fragment. ViewModel — cara yang lebih disukai, karena data tetap ada saat pembuatan ulang.
Fragment Transaction — operasi atomik untuk mengubah kumpulan fragmen. FragmentManager.beginTransaction() membuka transaksi di mana add, remove, replace, hide, show dapat dipanggil. Setiap transaksi diakhiri dengan commit() atau commitNow().
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga