Sobes.tech
Junior

Kako implementirati fragmente u Activity?

sobes.tech АИ

Одговор од АИ

У активити фрагменти могу бити имплементирани декларативно у XML-у или програмски уз помоћ FragmentManager.

Декларативно (у XML-у):

<fragment
    android:id="@+id/my_fragment"
    android:name="com.example.MyFragment" // Пуна имена класе фрагмента
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • Фрагмент се додаје при креирању активити.
  • Лако за коришћење за статичке распореде.
  • Мање флексибилан за динамичке операције.

Програмирано (уз помоћ FragmentManager):

// Унутар метода активити, на пример, onCreate или при догађају
val fragmentManager = supportFragmentManager // За AppCompatActivity
val fragmentTransaction = fragmentManager.beginTransaction()

// Додавање фрагмента
val myFragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, myFragment)

// Замењивање фрагмента (уклања постојећи у контејнеру и додаје нови)
// val newFragment = NewFragment()
// fragmentTransaction.replace(R.id.fragment_container, newFragment)

// Уклањање фрагмента
// val fragmentToRemove = fragmentManager.findFragmentById(R.id.fragment_container)
// ако (fragmentToRemove != null) {
//     fragmentTransaction.remove(fragmentToRemove)
// }

// Додавање у Back Stack (омогућава кориснику да се врати на претходни фрагмент преко тастера "Назад")
fragmentTransaction.addToBackStack(null) // Стринг таг за бекстек (може бити null)

// Завршетак транзакције
fragmentTransaction.commit() // Асинхроно извршавање
// или
// fragmentTransaction.commitNow() // Синхроно извршавање
  • Користи се FragmentManager за управљање фрагментима.
  • FragmentTransaction се користи за извршавање операција (додавање, уклањање, замена итд.).
  • Пружа већу флексибилност за динамичке промене UI током извршавања.
  • Може управљати Back Stack-ом за навигацију.

Користећи контејнер:

За програмско додавање или замену фрагмената обично се користи контејнер у XML-у активити, на пример, FrameLayout или LinearLayout:

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Затим у коду активити фрагмент се додаје или замењује унутар овог контејнера.

Важни аспекти:

  • Животни циклус фрагмента је тесно повезан са животним циклусом активити.
  • Fragment Manager управља животним циклусом и стањем фрагмената.
  • Fragment Transaction се извршава атомски (или цела операција, или ниједна).
  • При коришћењу Back Stack-а потребно је позвати addToBackStack().
  • За рад са фрагментима у AppCompatActivity користите supportFragmentManager.