Fragment: mi ez, fragmentumok és FragmentManager Androidban

Szerző: IT Sectr Megjelenés: 2026-02-22 Olvasási idő: 7 perc

Fragment — újrafelhasználható UI komponens Androidban, amely Activity-be ágyazódik és FragmentManager-en keresztül kezelődik. Minden fragmentumnak saját életciklusa, layout-ja és állapota van. A Fragment megkönnyíti a különböző képernyőméretekhez való alkalmazkodást és a kód újrafelhasználását. További információért olvassa el a Google hivatalos útmutatóját.

Főbb pontok

  • Fragment — UI komponens Activity-n belül saját életciklussal és layout-tal
  • FragmentManager — osztály fragmentum-tranzakciók és visszalépési verem kezelésére
  • FragmentTransaction — atomi művelet fragmentumok hozzáadására, cseréjére vagy eltávolítására
  • Jetpack Fragment — könyvtár visszafelé kompatibilitáshoz Android 1.6-ig (API 4)
  • ViewModel — megosztott komponens adatcseréhez fragmentumok között egy Activity-n belül

Mi a Fragment?

Fragment — moduláris Android felhasználói felület komponens, amely a képernyő egy részét képviseli az Activity-n belül. A Fragment kezelheti saját layout-ját, feldolgozhatja az életciklus eseményeket és elmentheti állapotát. A modularitásnak köszönhetően egy fragmentum különböző Activity-kben és különböző eszközökön használható.

A Fragment API Android 3.0-ban (Honeycomb, API 11) jelent meg 2011-ben a tabletek támogatására. Ezt megelőzően a fejlesztőknek külön Activity-t kellett létrehozniuk telefonra és tablet-re. A Fragment lehetővé tette a képernyő független blokkokból való összeállítását. 2019-ben a Google kiadta a Jetpack Fragment könyvtárat visszafelé kompatibilitással API 4-ig.

A Google adatai szerint (2026) a Google Play alkalmazásainak 80%-a használja a Fragment-et valamilyen formában. A Jetpack Fragment könyvtárat több mint 10 milliárdszor töltötték le a Google Play Services-en keresztül. A Fragment még a Jetpack Compose korszakában is az Android architektúra kulcsfontosságú komponense marad.

Fragment életciklusa

A Fragment életciklusa bonyolultabb, mint az Activity-é, mivel függ a gazda Activity állapotától. A Fragment ugyanazokon az állapotokon megy keresztül, mint az Activity, de saját callback-eket ad hozzá: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment callbackActivity megfelelésCél
onAttachonCreate előttFragment az Activity-hez kapcsolódott
onCreateonCreateNem UI-hoz kapcsolódó adatok inicializálása
onCreateViewonCreateLayout létrehozása inflater-en keresztül
onViewCreatedonCreateUI elemek kötése a view létrehozása után
onDestroyViewonDestroyView eltávolítása, UI erőforrások felszabadítása
onDetachonDestroyFragment lekapcsolódott az Activity-ről

Fragment és Activity életciklusának összehasonlítása

A Fragment életciklusának fő különbsége — az onCreateView és onDestroyView meghívása az onCreate és onDestroy között. A Fragment létezhet UI nélkül (ha az onCreateView null-t ad vissza). Az Activity újralétrehozása után a FragmentManager automatikusan visszaállítja a fragmentumokat.

FragmentManager és tranzakciók

FragmentManager — központi osztály a fragmentumok Activity-n belüli kezelésére. Felelős a fragmentumok hozzáadásáért, eltávolításáért, cseréjéért, a visszalépési verem kezeléséért és az állapot visszaállításáért. A FragmentManager a supportFragmentManager-en (AndroidX) vagy fragmentManager-en (régi API) keresztül érhető el.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Ha a fragmentum még nincs hozzáadva — létrehozzuk
        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()
    }
}

A FragmentTransaction tranzakciói — atomiak. A commit() a következő Looper ciklusra ütemezi a végrehajtást. Azonnali végrehajtáshoz használja a commitNow()-t. Az addToBackStack(null) hozzáadja a tranzakciót a visszalépési veremhez — a «Vissza» gomb visszavonja a műveletet.

Fragment életciklusának metódusai

Vizsgáljuk meg a Fragment életciklusának kulcsfontosságú metódusait Kotlin példával. Az onCreateView létrehozza a layout-ot — az Activity-vel ellentétben a metódusnak View-t kell visszaadnia. Az onViewCreated közvetlenül utána hívódik, itt biztonságos az elemek id alapján történő keresése. Az onDestroyView — az utolsó pillanat a view referenciák tisztítására.

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("Részletek")
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

A View Binding minta _binding/binding használatával garantálja, hogy az onDestroyView után a layout referencia nullázódik. A binding elérése a view megsemmisítése után NullPointerException-t okoz. Ezt a mintát a Google ajánlja minden fragmentumhoz.

Adatátvitel fragmentumok között

Az adatátvitelhez fragmentumok között az Android több mechanizmust kínál. A legmegbízhatóbb — megosztott ViewModel, amely egy Activity fragmentumai között osztható meg. A Fragment Result API egyszeri eseményekhez alkalmas. A Bundle argumentumok — adatokhoz a fragmentum létrehozásakor.

kotlin
// Megosztott ViewModel két fragmentumhoz
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

    fun select(item: Item) { _selectedItem.setValue(item) }
}

// A Fragment: eseményt küld a Fragment Result API-n keresztül
setFragmentResult("request_key", bundleOf("key" to "value"))

// B Fragment: fogadja az eseményt
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

A Fragment Result API (Fragment 1.3.0-ban hozzáadva) leváltja az elavult setTargetFragment/onActivityResult-ot. Az API type-safe, Bundle-t használ, és nem igényli a címzett ismeretét. A Parent FragmentManager közvetítőként működik a fragmentumok között.

Fragment vs Activity: mikor mit válasszunk

A Fragment és Activity közötti választás az alkalmazás architektúrájától függ. A Fragment kötelező az adaptív layout-okhoz (telefon + tablet), egyéni átmeneti animációkhoz és a Jetpack Navigation használatához. Az Activity egyszerű, egy-két képernyős alkalmazásokhoz előnyösebb.

SzempontFragmentActivity
Létrehozás sebességeGyorsabb (könnyű komponens)Lassabb (rendszerfolyamat)
ÚjrafelhasználásMagas (egy fragmentum különböző Activity-kben)Alacsony (minden képernyő — saját Activity)
Átmeneti animációRugalmas (FragmentTransaction)Korlátozott (overridePendingTransition)
Mentés elforgatáskorAutomatikus (kezelő visszaállítja)Kézi (onSaveInstanceState)
Deep LinksNavigation Component-en keresztülNatív támogatás intent-filter-en keresztül

Jetpack Fragment és Jetpack Navigation

A Fragment-tel való munkavégzés modern megközelítése — a Jetpack Navigation Component, amely leváltja a FragmentManager kézi kezelését. A könyvtár NavGraph-ot (XML navigációs gráf), NavHostFragment-et és Safe Args-ot biztosít type-safe adatátvitelhez.

Jetpack Fragment könyvtár (androidx.fragment:fragment-ktx) tartalmazza a FragmentResult API-t, DialogFragment-et, BottomSheetDialogFragment-et és integrációt Lifecycle-aware komponensekkel. 2026-tól a Google azt ajánlja, hogy a Fragment-et csak Jetpack Navigation-en keresztül használjuk, ne közvetlenül.

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="Lista">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Részletek" />
</navigation>

Gyakran ismételt kérdések

FragmentManager — mi ez?

FragmentManager — osztály, amely a fragmentum-tranzakciókat kezeli. Hozzáadja, eltávolítja, cseréli a fragmentumokat az Activity konténerében. A FragmentManager visszaállítja a fragmentumok állapotát az Activity újralétrehozásakor és kezeli a visszalépési vermet.

Miben különbözik a Fragment az Activity-től?

Fragment — az UI része az Activity-n belül, nem létezhet önállóan. A Fragment túléli az Activity újralétrehozását képernyőelforgatáskor. Az Activity — teljes képernyő saját Lifecycle-lel, a Fragment függ az Activity Lifecycle-étől.

Mikor használjunk Fragment-et Activity helyett?

Fragment — amikor a képernyő több független blokkból áll (lapok, master-detail, alkalmazkodás tablethez). Activity — amikor a képernyőn nincsenek ismétlődő blokkok. A Google a Single Activity + több Fragment kombinációt ajánlja.

Hogyan adjunk át adatokat Fragment-ek között?

Három módon: szülő Activity-n keresztül (megosztott ViewModel), Fragment Result API-n keresztül (setFragmentResult), Bundle argumentumokon keresztül a Fragment létrehozásakor. A ViewModel — preferált módszer, mivel az adatok megőrződnek újralétrehozáskor.

Mi az a Fragment Transaction?

Fragment Transaction — atomi művelet a fragmentumok halmazának megváltoztatására. A FragmentManager.beginTransaction() megnyit egy tranzakciót, amelyben add, remove, replace, hide, show hívható. Minden tranzakció commit() vagy commitNow() hívással végződik.

Összefoglaló

  • Fragment — újrafelhasználható UI komponens Activity-n belül saját életciklussal, layout-tal és állapottal
  • FragmentManager kezeli a fragmentum-tranzakciókat és visszaállítja azok állapotát az Activity újralétrehozásakor
  • FragmentTransaction — atomi művelet fragmentumok hozzáadására, cseréjére, eltávolítására és elrejtésére
  • Fragment életciklusa hat callback-et foglal magában, onAttach-tól onDetach-ig, kiegészítő onCreateView ponttal
  • ViewModel — ajánlott adatcsere mód fragmentumok között egy Activity-n belül
  • Fragment Result API type-safe egyszeri események átvitelét biztosítja fragmentumok között

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is