Sobes.tech
Junior

Jak można zaimplementować fragmenty w Activity?

sobes.tech AI

Odpowiedź od AI

W fragmentach Activity można je implementować deklaratywnie w XML lub programowo za pomocą FragmentManager.

Deklaratywnie (w XML):

<fragment
    android:id="@+id/my_fragment"
    android:name="com.example.MyFragment" // Pełna nazwa klasy fragmentu
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • Fragment jest dodawany podczas tworzenia Activity.
  • Łatwy w użyciu dla statycznych układów.
  • Mniej elastyczny dla operacji dynamicznych.

Programowo (z FragmentManager):

// Wewnątrz metody Activity, np. onCreate lub podczas zdarzenia
val fragmentManager = supportFragmentManager // Dla AppCompatActivity
val fragmentTransaction = fragmentManager.beginTransaction()

// Dodanie fragmentu
val myFragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, myFragment)

// Zamiana fragmentu (usuwa istniejący w kontenerze i dodaje nowy)
// val newFragment = NewFragment()
// fragmentTransaction.replace(R.id.fragment_container, newFragment)

// Usunięcie fragmentu
// val fragmentToRemove = fragmentManager.findFragmentById(R.id.fragment_container)
// if (fragmentToRemove != null) {
//     fragmentTransaction.remove(fragmentToRemove)
// }

// Dodanie do stosu powrotu (pozwala użytkownikowi wrócić do poprzedniego fragmentu przyciskiem "Wstecz")
fragmentTransaction.addToBackStack(null) // Ciąg etykiety dla stosu powrotu (może być null)

// Zakończenie transakcji
fragmentTransaction.commit() // Wykonanie asynchroniczne
// lub
// fragmentTransaction.commitNow() // Wykonanie synchroniczne
  • Używa się FragmentManager do zarządzania fragmentami.
  • FragmentTransaction służy do wykonywania operacji (dodawanie, usuwanie, zamiana itp.).
  • Zapewnia większą elastyczność do dynamicznych zmian UI podczas działania.
  • Można zarządzać stosami powrotu dla nawigacji.

Użycie kontenera:

Do programowego dodawania lub zamiany fragmentów zwykle używa się kontenera w układzie XML Activity, np. FrameLayout lub LinearLayout:

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

Następnie w kodzie Activity fragment jest dodawany lub zamieniany wewnątrz tego kontenera.

Ważne aspekty:

  • Cykl życia fragmentu jest ściśle powiązany z cyklem życia Activity.
  • FragmentManager zarządza cyklem życia i stanem fragmentów.
  • Transakcja fragmentu jest wykonywana atomowo (cała operacja lub żadna).
  • Przy użyciu stosu powrotu konieczne jest wywołanie addToBackStack().
  • Do pracy z fragmentami w AppCompatActivity używa się supportFragmentManager.