Fragment: co to je, fragmenty a FragmentManager v Androidu

Autor: IT Sectr Publikováno: 2026-02-22 Doba čtení: 7 min

Fragment — znovupoužitelná UI komponenta v Androidu, která je vložena do Activity a spravována přes FragmentManager. Každý fragment má vlastní životní cyklus, layout a stav. Fragment usnadňuje přizpůsobení různým velikostem obrazovky a opětovné použití kódu. Více informací naleznete v oficiálním průvodci Google.

Hlavní body

  • Fragment — UI komponenta uvnitř Activity s vlastním životním cyklem a layoutem
  • FragmentManager — třída pro správu transakcí fragmentů a zásobníku zpět
  • FragmentTransaction — atomická operace přidání, nahrazení nebo odstranění fragmentů
  • Jetpack Fragment — knihovna pro zpětnou kompatibilitu až do Android 1.6 (API 4)
  • ViewModel — sdílená komponenta pro výměnu dat mezi fragmenty v jednom Activity

Co je Fragment?

Fragment — modulární komponenta uživatelského rozhraní Android, která představuje část obrazovky uvnitř Activity. Fragment může spravovat vlastní layout, zpracovávat události životního cyklu a ukládat svůj stav. Díky modularitě lze jeden fragment použít v různých Activity a na různých zařízeních.

Fragment API se objevil v Android 3.0 (Honeycomb, API 11) v roce 2011 pro podporu tabletů. Předtím museli vývojáři vytvářet samostatná Activity pro telefon a tablet. Fragment umožnil sestavit obrazovku z nezávislých bloků. V roce 2019 Google vydal knihovnu Jetpack Fragment se zpětnou kompatibilitou až do API 4.

Podle údajů Google (2026) 80% aplikací v Google Play používá Fragment v té či oné formě. Knihovna Jetpack Fragment byla stažena více než 10 miliardkrát prostřednictvím Google Play Services. Fragment zůstává klíčovou komponentou architektury Android i v éře Jetpack Compose.

Životní cyklus Fragmentu

Životní cyklus Fragmentu je složitější než u Activity, protože závisí na stavu hostitelského Activity. Fragment prochází stejnými stavy jako Activity, ale přidává vlastní callbacky: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Callback FragmentuOdpovídá ActivityÚčel
onAttachpřed onCreateFragment připojen k Activity
onCreateonCreateInicializace dat nesouvisejících s UI
onCreateViewonCreateVytvoření layoutu přes inflater
onViewCreatedonCreatePropojení UI prvků po vytvoření view
onDestroyViewonDestroyOdstranění view, uvolnění UI zdrojů
onDetachonDestroyFragment odpojen od Activity

Srovnání životního cyklu Fragmentu a Activity

Hlavní rozdíl životního cyklu Fragmentu — volání onCreateView a onDestroyView mezi onCreate a onDestroy. Fragment může existovat bez UI (pokud onCreateView vrací null). Po opětovném vytvoření Activity FragmentManager fragmenty automaticky obnoví.

FragmentManager a transakce

FragmentManager — centrální třída pro správu fragmentů v Activity. Zodpovídá za přidávání, odebírání, nahrazování fragmentů, správu zásobníku zpět a obnovu stavu. FragmentManager je dostupný přes supportFragmentManager (AndroidX) nebo fragmentManager (staré API).

kotlin
class MainActivity : AppCompatActivity() {

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

        // Pokud fragment ještě není přidán — vytvoříme ho
        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()
    }
}

Transakce FragmentTransaction — jsou atomické. commit() naplánuje provedení na další cyklus Looper. Pro okamžité provedení použijte commitNow(). addToBackStack(null) přidá transakci do zásobníku zpět — tlačítko «Zpět» operaci vrátí.

Metody životního cyklu Fragmentu

Podívejme se na klíčové metody životního cyklu Fragmentu s příkladem v Kotlinu. onCreateView vytváří layout — na rozdíl od Activity musí metoda vrátit View. onViewCreated je volán hned poté, zde je bezpečné hledat prvky podle id. onDestroyView — poslední okamžik pro vyčištění referencí na 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("Podrobnosti")
    }

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

Vzor View Binding s _binding/binding zaručuje, že po onDestroyView je reference na layout vynulována. Přístup k binding po zničení view způsobí NullPointerException. Tento vzor doporučuje Google pro všechny fragmenty.

Přenos dat mezi fragmenty

Pro přenos dat mezi fragmenty nabízí Android několik mechanismů. Neispolehlivější — sdílený ViewModel, který je společný pro fragmenty jednoho Activity. Fragment Result API je vhodný pro jednorázové události. Bundle argumenty — pro data při vytváření fragmentu.

kotlin
// Sdílený ViewModel pro dva fragmenty
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

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

// Fragment A: odesílá událost přes Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B: přijímá událost
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (přidán ve Fragment 1.3.0) nahrazuje zastaralé setTargetFragment/onActivityResult. API je typově bezpečné, používá Bundle a nevyžaduje znalost příjemce. Parent FragmentManager funguje jako prostředník mezi fragmenty.

Fragment vs Activity: kdy co zvolit

Volba mezi Fragmentem a Activity závisí na architektuře aplikace. Fragment je povinný pro adaptivní layouty (telefon + tablet), vlastní animace přechodů a použití Jetpack Navigation. Activity je vhodnější pro jednoduché aplikace s jednou až dvěma obrazovkami.

KritériumFragmentActivity
Rychlost vytvořeníRychlejší (lehká komponenta)Pomalejší (systémový proces)
Opětovné použitíVysoké (jeden fragment v různých Activity)Nízké (každá obrazovka — vlastní Activity)
Animace přechodůFlexibilní (FragmentTransaction)Omezená (overridePendingTransition)
Uložení při otočeníAutomatické (správce obnoví)Ruční (onSaveInstanceState)
Deep LinksPřes Navigation ComponentNativní podpora přes intent-filter

Jetpack Fragment a Jetpack Navigation

Moderní přístup k práci s Fragmentem — Jetpack Navigation Component, který nahrazuje ruční správu FragmentManager. Knihovna poskytuje NavGraph (XML navigační graf), NavHostFragment a Safe Args pro typově bezpečný přenos dat.

Knihovna Jetpack Fragment (androidx.fragment:fragment-ktx) zahrnuje FragmentResult API, DialogFragment, BottomSheetDialogFragment a integraci s Lifecycle-aware komponentami. Od roku 2026 Google doporučuje používat Fragment pouze přes Jetpack Navigation, ne přímo.

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

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

Často kladené otázky

FragmentManager — co to je?

FragmentManager — třída, která spravuje transakce fragmentů. Přidává, odebírá, nahrazuje fragmenty v kontejneru Activity. FragmentManager obnovuje stav fragmentů při opětovném vytvoření Activity a spravuje zásobník zpět.

Čím se Fragment liší od Activity?

Fragment — část UI uvnitř Activity, nemůže existovat samostatně. Fragment přežije opětovné vytvoření Activity při otočení obrazovky. Activity — plnohodnotná obrazovka s vlastním Lifecycle, Fragment závisí na Lifecycle Activity.

Kdy použít Fragment místo Activity?

Fragment — když obrazovka sestává z několika nezávislých bloků (karty, master-detail, přizpůsobení tabletu). Activity — když obrazovka nemá opakující se bloky. Google doporučuje Single Activity + mnoho Fragmentů.

Jak předat data mezi Fragmenty?

Tři způsoby: přes rodičovské Activity (sdílený ViewModel), přes Fragment Result API (setFragmentResult), přes Bundle argumenty při vytváření Fragmentu. ViewModel — preferovaný způsob, protože data jsou zachována při opětovném vytvoření.

Co je Fragment Transaction?

Fragment Transaction — atomická operace změny sady fragmentů. FragmentManager.beginTransaction() otevírá transakci, ve které lze volat add, remove, replace, hide, show. Každá transakce končí commit() nebo commitNow().

Shrnutí

  • Fragment — znovupoužitelná UI komponenta uvnitř Activity s vlastním životním cyklem, layoutem a stavem
  • FragmentManager spravuje transakce fragmentů a obnovuje jejich stav při opětovném vytvoření Activity
  • FragmentTransaction — atomická operace pro přidání, nahrazení, odstranění a skrytí fragmentů
  • Životní cyklus Fragmentu zahrnuje šest callbacků, od onAttach po onDetach, s dodatečným bodem onCreateView
  • ViewModel — doporučený způsob výměny dat mezi fragmenty v jednom Activity
  • Fragment Result API zajišťuje typově bezpečný přenos jednorázových událostí mezi fragmenty

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také