Fragment: apa itu, fragmen dan FragmentManager di Android

Penulis: IT Sectr Diterbitkan: 2026-02-22 Waktu membaca: 7 mnt

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 UI di dalam Activity dengan siklus hidup dan layout sendiri
  • FragmentManager — kelas untuk mengelola transaksi fragmen dan back stack
  • FragmentTransaction — operasi atomik untuk menambah, mengganti, atau menghapus fragmen
  • Jetpack Fragment — pustaka untuk kompatibilitas mundur hingga Android 1.6 (API 4)
  • ViewModel — komponen bersama untuk bertukar data antar fragmen dalam satu Activity

Apa itu Fragment?

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

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 FragmentPadanan ActivityTujuan
onAttachsebelum onCreateFragment terikat ke Activity
onCreateonCreateInisialisasi data yang tidak terkait UI
onCreateViewonCreateMembuat layout melalui inflater
onViewCreatedonCreateMengikat elemen UI setelah view dibuat
onDestroyViewonDestroyMenghapus view, membebaskan sumber daya UI
onDetachonDestroyFragment terlepas dari Activity

Perbandingan siklus hidup Fragment dan 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 dan transaksi

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).

kotlin
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.

Metode siklus hidup Fragment

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.

kotlin
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.

Mentransfer data antar 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.

kotlin
// 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.

Fragment vs Activity: kapan memilih apa

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.

KriteriaFragmentActivity
Kecepatan pembuatanLebih cepat (komponen ringan)Lebih lambat (proses sistem)
Penggunaan kembaliTinggi (satu fragmen di Activity berbeda)Rendah (setiap layar — Activity sendiri)
Animasi transisiFleksibel (FragmentTransaction)Terbatas (overridePendingTransition)
Penyimpanan saat rotasiOtomatis (manajer memulihkan)Manual (onSaveInstanceState)
Deep LinksMelalui Navigation ComponentDukungan native melalui intent-filter

Jetpack Fragment dan Jetpack Navigation

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.

xml

<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 — apa itu?

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.

Apa perbedaan Fragment dengan Activity?

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.

Kapan menggunakan Fragment daripada 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.

Bagaimana cara mentransfer data antar 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.

Apa itu Fragment Transaction?

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

  • Fragment — komponen UI yang dapat digunakan kembali di dalam Activity dengan siklus hidup, layout, dan status sendiri
  • FragmentManager mengelola transaksi fragmen dan memulihkan statusnya saat Activity dibuat ulang
  • FragmentTransaction — operasi atomik untuk menambah, mengganti, menghapus, dan menyembunyikan fragmen
  • Siklus hidup Fragment mencakup enam callback, dari onAttach hingga onDetach, dengan titik tambahan onCreateView
  • ViewModel — cara yang disarankan untuk bertukar data antar fragmen dalam satu Activity
  • Fragment Result API menyediakan transfer type-safe peristiwa satu kali antar fragmen

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.

Diskusikan proyek

Baca juga