Fragment: шта је то, фрагменти и FragmentManager у Android-у

Аутор: IT Sectr Објављено: 2026-02-22 Време читања: 7 мин

Fragment — вишекратно употребљива UI компонента у Android-у која се уграђује у Activity и управља се кроз FragmentManager. Сваки фрагмент има сопствени животни циклус, layout и стање. Fragment поједностављује прилагођавање различитим величинама екрана и поновну употребу кода. Више информација прочитајте у званичном Google водичу.

Главне ствари

  • Fragment — UI компонента унутар Activity са сопственим животним циклусом и layout-ом
  • FragmentManager — класа за управљање трансакцијама фрагмената и back stactk-ом
  • FragmentTransaction — атомична операција додавања, замене или уклањања фрагмената
  • Jetpack Fragment — библиотека за уназад компатибилност до Android 1.6 (API 4)
  • ViewModel — заједничка компонента за размену података између фрагмената у истом Activity-ју

Шта је Fragment?

Fragment — модуларна компонента Android корисничког интерфејса која представља део екрана унутар Activity-ја. Fragment може управљати сопственим layout-ом, обрађивати догађаје животног циклуса и чувати своје стање. Захваљујући модуларности, један фрагмент се може користити у различитим Activity-јима и на различитим уређајима.

Fragment API се појавио у Android 3.0 (Honeycomb, API 11) 2011. године за подршку таблетима. Пре тога, програмери су морали да креирају засебне Activity-је за телефон и таблет. Fragment је омогућио састављање екрана из независних блокова. 2019. године Google је издао Jetpack Fragment библиотеку са уназад компатибилношћу до API 4.

Према Google подацима (2026), 80% апликација у Google Play-у користи Fragment у неком облику. Jetpack Fragment библиотека је преузета преко 10 милијарди пута кроз Google Play Services. Fragment остаје кључна компонента Android архитектуре чак и у ери Jetpack Compose-а.

Животни циклус Fragment-а

Животни циклус Fragment-а је сложенији него код Activity-ја, јер зависи од стања Activity-ја домаћина. Fragment пролази кроз иста стања као и Activity, али додаје сопствене колбекове: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment колбекПодударање са ActivityНамена
onAttachпре onCreateFragment повезан са Activity
onCreateonCreateИницијализација података невезаних за UI
onCreateViewonCreateКреирање layout-а кроз inflater
onViewCreatedonCreateПовезивање UI елемената након креирања view-а
onDestroyViewonDestroyУклањање view-а, ослобађање UI ресурса
onDetachonDestroyFragment одвојен од Activity-ја

Поређење Lifecycle Fragment-а и Activity-ја

Главна разлика животног циклуса Fragment-а — позивање onCreateView и onDestroyView између onCreate и onDestroy. Fragment може постојати без UI (ако onCreateView враћа null). Након поновног креирања Activity-ја, FragmentManager аутоматски обнавља фрагменте.

FragmentManager и трансакције

FragmentManager — централна класа за управљање фрагментима у Activity-ју. Одговоран је за додавање, уклањање, замену фрагмената, управљање back stack-ом и обнављање стања. FragmentManager је доступан кроз supportFragmentManager (AndroidX) или fragmentManager (стари API).

kotlin
class MainActivity : AppCompatActivity() {

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

        // Ако фрагмент још није додат — креирамо
        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()
    }
}

Трансакције FragmentTransaction — су атомичне. commit() планира извршење за следећи Looper циклус. За тренутно извршење користите commitNow(). addToBackStack(null) додаје трансакцију у стек назад — дугме «Назад» ће поништити операцију.

Методе животног циклуса Fragment-а

Размотримо кључне методе животног циклуса Fragment-а са примером у Kotlin-у. onCreateView креира layout — за разлику од Activity-ја, метод мора вратити View. onViewCreated се позива одмах након тога, овде је безбедно проналазити елементе по id-у. onDestroyView — последњи тренутак за чишћење референци на 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("Детаљи")
    }

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

Образац View Binding са _binding/binding гарантује да се након onDestroyView референца на layout поништава. Обраћање binding-у након уништења view-а ће изазвати NullPointerException. Овај образац препоручује Google за све фрагменте.

Пренос података између фрагмената

За пренос података између фрагмената, Android нуди неколико механизама. Најпоузданији — заједнички ViewModel, дељен између фрагмената истог Activity-ја. Fragment Result API је погодан за једнократне догађаје. Bundle аргументи — за податке приликом креирања фрагмента.

kotlin
// Заједнички ViewModel за два фрагмента
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

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

// Фрагмент A: шаље догађај кроз Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Фрагмент B: прима догађај
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (додат у Fragment 1.3.0) замењује застареле setTargetFragment/onActivityResult. API је type-safe, користи Bundle и не захтева познавање примаоца. Parent FragmentManager делује као посредник између фрагмената.

Fragment vs Activity: када шта изабрати

Избор између Fragment-а и Activity-ја зависи од архитектуре апликације. Fragment је обавезан за адаптивне layout-е (телефон + таблет), за прилагођену анимацију прелаза и за коришћење Jetpack Navigation-а. Activity је пожељнији за једноставне апликације са једним-два екрана.

КритеријумFragmentActivity
Брзина креирањаБржи (лака компонента)Спорији (системски процес)
Поновна употребаВисока (један фрагмент у различитим Activity-јима)Ниска (сваки екран — свој Activity)
Анимација прелазаФлексибилна (FragmentTransaction)Ограничена (overridePendingTransition)
Чување при ротацијиАутоматско (менаџер обнавља)Ручно (onSaveInstanceState)
Deep LinksКроз Navigation ComponentИзворна подршка кроз intent-filter

Jetpack Fragment и Jetpack Navigation

Савремени приступ раду са Fragment-ом — Jetpack Navigation Component, који замењује ручно управљање FragmentManager-ом. Библиотека пружа NavGraph (XML граф навигације), NavHostFragment и Safe Args за type-safe пренос података.

Jetpack Fragment библиотека (androidx.fragment:fragment-ktx) укључује FragmentResult API, DialogFragment, BottomSheetDialogFragment и интеграцију са Lifecycle-aware компонентама. Од 2026. године Google препоручује коришћење Fragment-а само кроз Jetpack Navigation, а не директно.

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="Листа">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Детаљи" />
</navigation>

Често постављана питања

FragmentManager — шта је то?

FragmentManager — класа која управља трансакцијама фрагмената. Додаје, уклања, замењује фрагменте у контејнеру Activity-ја. FragmentManager обнавља стање фрагмената при поновном креирању Activity-ја и управља back stack-ом.

По чему се Fragment разликује од Activity-ја?

Fragment — део UI унутар Activity-ја, не може постојати самостално. Fragment преживљава поновно креирање Activity-ја при ротацији екрана. Activity — пуноправни екран са сопственим Lifecycle-ом, Fragment зависи од Lifecycle-а Activity-ја.

Када користити Fragment уместо Activity-ја?

Fragment — када се екран састоји од више независних блокова (табови, master-detail, прилагођавање таблету). Activity — када екран нема понављајуће блокове. Google препоручује Single Activity + више Fragment-а.

Како пренети податке између Fragment-а?

Три начина: кроз родитељски Activity (заједнички ViewModel), кроз Fragment Result API (setFragmentResult), кроз Bundle аргументе при креирању Fragment-а. ViewModel — пожељни начин, јер се подаци чувају при поновном креирању.

Шта је Fragment Transaction?

Fragment Transaction — атомична операција промене скупа фрагмената. FragmentManager.beginTransaction() отвара трансакцију у којој се може позвати add, remove, replace, hide, show. Свака трансакција се завршава са commit() или commitNow().

Завршни закључци

  • Fragment — вишекратно употребљива UI компонента унутар Activity-ја са сопственим животним циклусом, layout-ом и стањем
  • FragmentManager управља трансакцијама фрагмената и обнавља њихово стање при поновном креирању Activity-ја
  • FragmentTransaction — атомична операција за додавање, замену, уклањање и скривање фрагмената
  • Животни циклус Fragment-а укључује шест колбекова, од onAttach до onDetach, са додатном тачком onCreateView
  • ViewModel — препоручени начин размене података између фрагмената у истом Activity-ју
  • Fragment Result API обезбеђује type-safe пренос једнократних догађаја између фрагмената

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође