Sobes.tech
Junior

Cum se pot implementa fragmentele într-o Activity?

sobes.tech AI

Răspuns de la AI

În fragmentele de Activity, acestea pot fi implementate declarativ în XML sau programatic folosind FragmentManager.

Declarativ (în XML):

<fragment
    android:id="@+id/my_fragment"
    android:name="com.example.MyFragment" // Numele complet al clasei fragmentului
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • Fragmentul este adăugat la crearea Activity.
  • Ușor de utilizat pentru layout-uri statice.
  • Mai puțin flexibil pentru operațiuni dinamice.

Programatic (cu FragmentManager):

// În interiorul unei metode a Activity, de exemplu, onCreate sau la un eveniment
val fragmentManager = supportFragmentManager // Pentru AppCompatActivity
val fragmentTransaction = fragmentManager.beginTransaction()

// Adăugare fragment
val myFragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, myFragment)

// Înlocuire fragment (șterge cel existent în container și adaugă unul nou)
// val newFragment = NewFragment()
// fragmentTransaction.replace(R.id.fragment_container, newFragment)

// Ștergere fragment
// val fragmentToRemove = fragmentManager.findFragmentById(R.id.fragment_container)
// if (fragmentToRemove != null) {
//     fragmentTransaction.remove(fragmentToRemove)
// }

// Adăugare în Back Stack (permite utilizatorului să revină la fragmentul anterior cu butonul "Înapoi")
fragmentTransaction.addToBackStack(null) // Șir de etichete pentru back stack (poate fi null)

// Finalizare tranzacție
fragmentTransaction.commit() // Executare asincronă
// sau
// fragmentTransaction.commitNow() // Executare sincrona
  • Se folosește FragmentManager pentru gestionarea fragmentelor.
  • FragmentTransaction este folosit pentru a efectua operații (adăugare, eliminare, înlocuire etc.).
  • Oferă o flexibilitate mai mare pentru modificarea dinamică a UI-ului în timpul execuției.
  • Se poate gestiona Back Stack pentru navigare.

Utilizarea containerului:

Pentru adăugarea sau înlocuirea programatică a fragmentelor, de obicei se folosește un container în layout-ul XML al Activity, de exemplu, FrameLayout sau LinearLayout:

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

Apoi, în codul Activity, fragmentul este adăugat sau înlocuit în interiorul acestui container.

Aspecte importante:

  • Ciclul de viață al fragmentului este strâns legat de ciclul de viață al Activity.
  • FragmentManager gestionează ciclul de viață și starea fragmentelor.
  • Tranzacția de fragment se execută atomic (sau întreaga operație sau nimic).
  • La utilizarea Back Stack, trebuie apelată addToBackStack().
  • Pentru lucrul cu fragmente în AppCompatActivity, se folosește supportFragmentManager.