Android Fragment Lifecycle
I Dag skal vi lære Om Android Fragment Lifecycle og implementere en enkelt aktivitetsklasse bestående av to fragmenter i android-applikasjonen.
Android Fragment
Fragment
klasse I Android brukes til å bygge dynamiske Brukergrensesnitt. Fragment skal brukes innenfor Aktiviteten. En stor fordel med fragmenter er at det forenkler oppgaven med å lage UI for flere skjermstørrelser. En aktivitet kan inneholde et hvilket som helst antall fragmenter.Et Android-fragment er ikke I seg Selv En Underklasse Av Visning som de fleste ANDRE UI-komponenter er. I stedet har et fragment en visning inne i den. Det er denne visningen som til slutt vises inne i aktiviteten der fragmentet lever.
fordi en android fragment er ikke en visning, legge den til en aktivitet ser noe annerledes enn å legge til en visning (F.Eks TextView). Et fragment legges til En Visningsgruppe inne i aktiviteten. Fragmentets visning vises i Denne Visningsgruppen.
følgende diagram viser hva som skjer når et fragment legges til en aktivitet:
først får aktiviteten en referanse til fragmentet. Da blir det en referanse Til ViewGroup fragmentets visning vil bli gjengitt inne. Deretter legger aktiviteten til fragmentet. Fragmentet oppretter deretter visningen og returnerer den til aktiviteten. Visningen settes deretter inn I Visningsgruppens overordnede, og fragmentet er i live.
Fragment Livssyklus
Android fragment livssyklus er illustrert i bildet nedenfor.
Nedenfor er metodene for fragment livssyklus.
-
onAttach()
: Denne metoden vil bli kalt først, selv før onCreate (), slik at vi vet at fragmentet ditt er knyttet til en aktivitet. Du er bestått Aktiviteten som vil være vert for fragmentet ditt -
onCreateView()
: Systemet kaller denne tilbakeringingen når det er tid for fragmentet å tegne BRUKERGRENSESNITTET for første gang. For å tegne ET BRUKERGRENSESNITT for fragmentet, må En Visningskomponent returneres fra denne metoden som er roten til fragmentets layout. Vi kan returnere null hvis fragmentet ikke gir EN UI -
onViewCreated()
: Dette vil bli kalt etter onCreateView(). Dette er spesielt nyttig når du arver implementeringen av onCreateView (), men vi må konfigurere de resulterende visningene, for eksempel Med En Listefragment og når du skal sette opp en adapter -
onActivityCreated()
:Dette vil bli kalt etter onCreate () og onCreateView (), for å indikere at aktivitetens onCreate () er fullført. Hvis det er noe som må initialiseres i fragmentet som avhenger av at aktivitetens onCreate() har fullført sitt arbeid, kan onActivityCreated() brukes til det initialiseringsarbeidet -
onPause()
: systemet kaller denne metoden som første indikasjon på at brukeren forlater fragmentet. Dette er vanligvis der du bør begå endringer som bør vedvare utover gjeldende bruker sesjon -
onStop()
: Fragment kommer til å bli stoppet ved å ringe onStop() -
onDestroyView()
: Det kalles før onDestroy(). Dette er motstykket til onCreateView () der vi setter OPP BRUKERGRENSESNITTET. Hvis det er ting som må ryddes opp spesifikt for BRUKERGRENSESNITTET, kan den logikken settes opp i onDestroyView() -
onDestroy()
: onDestroy () kalt til å gjøre endelig rydde opp i fragment tilstand, men ikke garantert å bli kalt Av Android-plattformen. -
onDetach()
: det kalles etter onDestroy (), for å varsle at fragmentet har blitt disassociated fra sin hosting aktivitet
onStart()
: onStart () – metoden kalles når fragmentet blir synlig
Android Fragment Klasser
Fragmenter ble lagt Til Android API I Honeycomb (API 11).
-
android.app.Fragment
: grunnklassen for alle fragmentdefinisjoner -
android.app.FragmentManager
: Klassen for interaksjon med fragmentobjekter inne i en aktivitet -
android.app.FragmentTransaction
: klassen for å utføre et atomsett med fragmentoperasjoner
Når du bruker et kompatibilitetspakkebibliotek levert Av Google, brukes følgende klasser til implementering.
-
android.support.v4.app.FragmentActivity
: Grunnklassen for alle aktiviteter som bruker kompatibilitetsbaserte fragment (og laster) funksjoner android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
Android Fragment onCreateView ()
her er et prøvefragment ved hjelp av oncreateview() for implementeringen:
public class SampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_sample, parentViewGroup, false); return rootView; }}
onCreateView()
-metoden får en layoutflater, en viewgroup og et bunt som parametere.
LayoutInflater
er en komponent som kan lage Visning forekomst basert på layout XML-filer. Som du kan se, gjør eksemplet faktisk det ved å ringe layout.inflate()
.
inflate()
metoden tar tre parametere: iden til en layout XML-fil( inne I R. layout), en overordnet Visningsgruppe der fragmentets Visning skal settes inn, og en tredje boolsk som forteller om fragmentets Visning som oppblåst fra layout XML-filen skal settes inn i den overordnede Visningsgruppen. I dette tilfellet vil vi passere falsk fordi Visningen vil bli knyttet til den overordnede ViewGroup andre steder, av Noen Av Android koden vi kaller. Når du sender false som siste parameter for å blåse opp (), brukes den overordnede Visningsgruppen fortsatt for layoutberegninger av den oppblåste Visningen, slik at du ikke kan sende null som overordnet Visningsgruppe .
ViewGroup
parameter av onCreateView () er den overordnede Visningsgruppen Der Visningen av fragmentet skal settes inn. Dette er En ViewGroup inne i aktiviteten som vil «vert» fragmentet.
Bundle
parameter av onCreateView() er En Bunt der fragmentet kan lagre data, akkurat som i En Aktivitet.
Android Fragment Example
Android fragments example project comprises of a single activity holding two fragments: TextFragment and MenuFragment respectively.
Android Fragment Example Code
The MainActivity
holds the two fragments TextFragment
and MenuFragment
. Så kan begynne med å definere fragmenter i xml layout
activity_main.xml
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="1.0"> <fragment android:layout_height="match_parent" android:layout_width="match_parent" class="journaldev.com.fragments.fragments.MenuFragment" android:id="@+id/fragment" android:layout_weight="0.5"/> <fragment android:layout_width="match_parent" android:layout_height="match_parent" class="journaldev.com.fragments.fragments.TextFragment" android:id="@+id/fragment2" android:layout_weight="0.5"/></LinearLayout>
som vi kan se klassen filer av fragmenter som er en del av denne aktiviteten er definert som class=»journaldev.com.fragments.fragments.TextFragment»
fragment klasser og deres oppsett er definert som vist i utdrag nedenfor.
package journaldev.com.fragments.fragments;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import journaldev.com.fragments.R;public class TextFragment extends Fragment { TextView text,vers; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.text_fragment, container, false); text= (TextView) view.findViewById(R.id.AndroidOs); vers= (TextView)view.findViewById(R.id.Version); return view; } public void change(String txt, String txt1){ text.setText(txt); vers.setText(txt1); }}
text_fragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:gravity="center" android:background="#5ba4e5" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40px" android:textColor="#ffffff" android:layout_gravity="center" android:id="@+id/AndroidOs"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#ffffff" android:textSize="30px" android:id="@+id/Version"/></LinearLayout>
Tekstfragmentet består av tekstvisninger med android-versjonsnavn og-nummer.
package journaldev.com.fragments.fragments;import android.app.ListFragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import journaldev.com.fragments.R;public class MenuFragment extends ListFragment { String AndroidOS = new String { "Cupcake","Donut","Eclair","Froyo","Gingerbread","Honeycomb","Ice Cream SandWich","Jelly Bean","KitKat" }; String Version = new String{"1.5","1.6","2.0-2.1","2.2","2.3","3.0-3.2","4.0","4.1-4.3","4.4"}; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.list_fragment, container, false); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, AndroidOS); setListAdapter(adapter); return view; } @Override public void onListItemClick(ListView l, View v, int position, long id) { TextFragment txt = (TextFragment)getFragmentManager().findFragmentById(R.id.fragment2); txt.change(AndroidOS,"Version : "+Version); getListView().setSelector(android.R.color.holo_blue_dark); }}
list_fragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/list" /></LinearLayout>
Menyen viser En Listevisning. Som vi kan se her, er oppsettet Av ListView standard simple_list_item_1 i motsetning til det tilpassede oppsettet vi opprettet for ListView i forrige artikkel.
Hovedaktiviteten påkaller setContentView fra onCreate-Metoden, det er det. Fragmentene kalles fra xml-filen.
Alternativt kan vi legge til fragmentene fra aktivitetsklassen ved hjelp av FragmentManager
som vist i kodebiten nedenfor:
getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();
her id fragmentParentViewGroup tilhører FrameLayout vist nedenfor:
<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/fragmentParentViewGroup" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity" tools:ignore="MergeRootFrame" />
Android Fragment Eksempel App
nedenfor viser produksjonen produsert av vårt prosjekt, kan du se at to fragmenter er til stede her, og når du velger en av dem i venstre fragment, data blir befolket i høyre side fragment.
du kan laste ned siste android fragment prosjektet fra under linken.