Fragment reprezentuje modułową część użytkownika w ramach działania. Fragment ma własny cykl życia, otrzymuje swój własnych zdarzeń wejściowych, a także dodawać i usuwać fragmenty, jest w toku.
Ten dokument opisuje, jak utworzyć fragment i uwzględnić go w działaniu.
Skonfiguruj środowisko
Fragmenty wymagają zależności od tagu
Biblioteka fragmentów AndroidaX Czynności, które musisz wykonać
dodaj repozytorium Google Maven.
do pliku settings.gradle projektu, aby uwzględnić tę zależność.
Odlotowe
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
Kotlin
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() ... } }
Aby uwzględnić w swoim projekcie bibliotekę fragmentów AndroidX, dodaj:
zależności w pliku build.gradle aplikacji:
Odlotowe
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") }
Tworzenie klasy fragmentu
Aby utworzyć fragment, rozszerz AndroidaX
Fragment i zastąp
wstawia logikę aplikacji, podobnie jak
zajęcia Activity. Aby utworzyć minimalną
fragment określający własny układ, podaj zasób układu Twojego fragmentu
do konstruktora podstawowego, jak w tym przykładzie:
Kotlin
class ExampleFragment : Fragment(R.layout.example_fragment)
Java
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } }
Biblioteka Fragment zawiera też bardziej specjalistyczne klasy bazowe fragmentów:
DialogFragment- Wyświetla pływające okno. Warto użyć tych zajęć do utworzenia okna,
to alternatywa dla metod pomocniczych w oknie
Activityklasa jako fragmenty automatycznie obsługuje tworzenie i czyszczenieDialog. Patrz Wyświetlanie okien, w których jestDialogFragmentaby dowiedzieć się więcej. PreferenceFragmentCompat- Wyświetla hierarchię:
Preferencejako z listy. Za pomocą usługiPreferenceFragmentCompatmożesz: utworzyć ekran ustawień aplikacji.
Dodawanie fragmentu do aktywności
Ogólnie fragment musi być osadzony w AndroidX
FragmentActivity do
elementów interfejsu użytkownika
do układu danego działania. FragmentActivity
to klasa bazowa dla argumentu
AppCompatActivity,
więc jeśli już podklasyfikujesz AppCompatActivity, aby podać wstecz
zgodność z aplikacją, nie musisz zmieniać ustawień aktywności.
klasę bazową.
Możesz dodać fragment do hierarchii widoku aktywności:
przez zdefiniowanie fragmentu w pliku układu aktywności lub zdefiniowanie elementu
kontenera fragmentów w pliku układu aktywności,
automatyczne dodanie fragmentu z poziomu aktywności. W obu przypadkach
aby dodać
FragmentContainerView
określającą lokalizację, w której należy umieścić dany fragment
w hierarchii widoków aktywności. Zdecydowanie zalecamy użycie tagu
FragmentContainerView jako kontenera na fragmenty,
FragmentContainerView zawiera poprawki fragmentów, które inne
nie zapewniają grup widoków danych, takich jak FrameLayout.
Dodaj fragment za pomocą kodu XML
Aby deklaratywnie dodać fragment do kodu XML układu aktywności, użyj
FragmentContainerView element.
Oto przykładowy układ aktywności zawierający
FragmentContainerView:
<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
andr>oid:name="com.example.ExampleFragment" /
Atrybut android:name określa nazwę klasy klasy Fragment do
utworzyć instancję. Gdy układ aktywności jest powiększony, określony fragment
jest tworzony,
onInflate()
dla nowo utworzonego fragmentu, a funkcja FragmentTransaction
aby dodać fragment do FragmentManager.
Automatyczne dodawanie fragmentu
Aby automatycznie dodać fragment do układu aktywności,
powinien zawierać element FragmentContainerView, który będzie pełnił funkcję kontenera fragmentów,
jak w tym przykładzie:
<!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:>layout_height="match_parent" /
W przeciwieństwie do metody XML atrybut android:name nie jest używany w plikach
FragmentContainerView, więc żaden konkretny fragment nie jest automatycznie
utworzony. Zamiast tego
FragmentTransaction
służy do utworzenia wystąpienia fragmentu i dodania go do układu działania.
Podczas trwania aktywności możesz dokonywać transakcji dotyczących fragmentów, takich jak
dodanie, usunięcie lub zastąpienie fragmentu. W FragmentActivity możesz
pobierz instancję
FragmentManager, czyli
można użyć do utworzenia FragmentTransaction. Następnie możesz utworzyć instancję
fragment w ramach metody onCreate() aktywności za pomocą
FragmentTransaction.add(),
przekazywanie identyfikatora ViewGroup kontenera w układzie i fragmencie
którą chcesz dodać, a następnie zatwierdź transakcję, jak pokazano
następujący przykład:
Kotlin
class ExampleActivity : AppCompatActivity(R.layout.example_activity) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { supportFragmentManager.commit { setReorderingAllowed(true) add<ExampleFragment>(R.id.fragment_container_view) } } } }
Java
public class ExampleActivity extends AppCompatActivity { public ExampleActivity() { super(R.layout.example_activity); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) .add(R.id.fragment_container_view, ExampleFragment.class, null) .commit(); } } }
Zwróć uwagę, że w poprzednim przykładzie transakcja z fragmentem jest tworzona
gdy savedInstanceState to null. W ten sposób zadbasz o to, aby fragment
jest dodawane tylko raz przy pierwszym utworzeniu aktywności. Gdy
nastąpi zmiana konfiguracji i aktywność jest odtwarzana ponownie,
savedInstanceState nie ma już wartości null, a fragment nie wymaga
do dodania po raz drugi, ponieważ fragment jest automatycznie przywrócony
z savedInstanceState.
Jeśli Twój fragment wymaga danych początkowych, można przekazać do niego argumenty, podając w wywołaniu funkcji FragmentTransaction.add() parametr Bundle w następujący sposób:
Kotlin
class ExampleActivity : AppCompatActivity(R.layout.example_activity) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (savedInstanceState == null) { val bundle = bundleOf("some_int" to 0) supportFragmentManager.commit { setReorderingAllowed(true) < addExampleFragment>(R.id.fragment_container_view, args = bundle) } } } }
Java
public class ExampleActivity extends AppCompatActivity { public ExampleActivity() { super(R.layout.example_activity); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { Bundle bundle = new Bundle(); bundle.putInt("some_int", 0); getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) .add(R.id.fragment_container_view, ExampleFragment.class, bundle) .commit(); } } }
Argumenty Bundle można następnie pobrać z poziomu fragmentu przez
połączenia
requireArguments(),
i odpowiednie metody pobierania Bundle mogą być używane do pobierania
każdego argumentu.
Kotlin
class ExampleFragment : Fragment(R.layout.example_fragment) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val someInt = requireArguments().getInt("some_int") ... } }
Java
class ExampleFragment extends Fragment { public ExampleFragment() { super(R.layout.example_fragment); } @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { int someInt = requireArguments().getInt("some_int"); ... } }
Zobacz również
Transakcje z użyciem fragmentów i FragmentManager zostały szczegółowo omówione.
w przewodniku po menedżerze fragmentów.