Android-fragmentin elinkaari
tänään tutustutaan Android-fragmentin elinkaareen ja toteutetaan yksi kahdesta fragmentista koostuva toimintoluokka android-sovelluksessa.
Android Fragment
Fragment
class Androidissa käytetään dynaamisten käyttöliittymien rakentamiseen. Fragmenttia tulee käyttää toiminnan sisällä. Fragmenttien suurin etu on se, että se yksinkertaistaa käyttöliittymän luomista useille näyttökooille. Toiminto voi sisältää minkä tahansa määrän fragmentteja.
Android-fragmentti ei itsessään ole näkymän alaluokka, jollaisia useimmat muut KÄYTTÖLIITTYMÄKOMPONENTIT ovat. Sen sijaan katkelman sisällä on näkymä. Juuri tämä näkemys näkyy lopulta sen toiminnan sisällä, jossa katkelma elää.
koska android-fragmentti ei ole näkymä, sen lisääminen toimintaan näyttää hieman erilaiselta kuin näkymän lisääminen (esimerkiksi TextView). Katkelma lisätään Näkymäryhmään toiminnon sisällä. Katkelman näkymä näkyy tämän Näkymäryhmän sisällä.
seuraava kaavio esittää, mitä tapahtuu, kun fragmentti lisätään johonkin toimintoon:
ensin toiminto saa viittauksen fragmenttiin. Sitten se saa viittauksen Katseluryhmään, jonka sisällä fragmentin näkymä renderöidään. Sitten toiminta lisää katkelman. Tämän jälkeen katkelma luo näkemyksensä ja palauttaa sen toimintaan. Tämän jälkeen näkymä lisätään ViewGroup-vanhempaan, ja katkelma on elossa.
fragmentin elinkaari
Android fragmentin elinkaari on havainnollistettu alla olevassa kuvassa.
alla on esitetty fragmentin elinkaaren menetelmät.
-
onAttach()
:tätä menetelmää kutsutaan ensin, jo ennen oncreatea(), kertoen meille, että fragmenttisi on liitetty johonkin toimintaan. Olet läpäissyt toiminnon, joka isännöi katkelmaasi -
onCreateView()
: Järjestelmä kutsuu tätä takaisinkutsua, kun fragmentin on aika piirtää käyttöliittymänsä ensimmäistä kertaa. Jotta KATKELMALLE voidaan piirtää käyttöliittymä, tästä menetelmästä on palautettava Näkymäkomponentti, joka on katkelman asettelun juuri. Voimme palauttaa Nullin, jos katkelma ei tarjoa UI -
onViewCreated()
: tätä kutsutaan onCreateView ’ n () jälkeen. Tämä on erityisen hyödyllistä perittäessä onCreateView () – toteutusta, mutta tuloksena olevat näkymät on määritettävä, kuten Listfragmentilla ja milloin sovitin perustetaan -
onActivityCreated()
:Tätä kutsutaan onCreate() ja onCreateView(), osoittaa, että toiminnan onCreate() on päättynyt. Jos fragmentissa on jotain alustettavaa, joka riippuu siitä, onko toiminto valmis (), Voidaan kyseiseen alustustyöhön käyttää onactivitycreated () – menetelmää -
onStart()
: onStart () – menetelmää kutsutaan fragmentin saatua näkyviin -
onPause()
: järjestelmä kutsuu tätä menetelmää ensimmäisenä osoituksena siitä, että käyttäjä on poistumassa katkelmasta. Tässä kohdassa sinun tulee yleensä toimittaa muutokset, joita pitäisi jatkaa nykyisen käyttäjän istunnon jälkeen -
onStop()
: fragmentit pysäytetään kutsumalla onStop() -
onDestroyView()
: sitä kutsutaan ennen onDestroy(). Tämä on vastine onCreateView (), jossa perustamme UI. Jos on KÄYTTÖLIITTYMÄKOHTAISIA siivottavia asioita, voidaan tuo logiikka esittää ondestroyview ’ssä () -
onDestroy()
: onDestroy () kutsui tekemään lopullisen puhdistuksen fragmentin tilasta, mutta ei ole varmaa, että Android-alusta kutsuu. -
onDetach()
: sen nimi on after onDestroy(), ilmoittaa, että fragmentti on irrotettu hosting-toiminnastaan
Android Fragmenttiluokat
fragmentteja lisättiin Android API: n Hunajakennossa(API 11).
-
android.app.Fragment
: kaikkien fragmenttien määritelmien perusluokka -
android.app.FragmentManager
: Luokka vuorovaikutukselle fragmenttiobjektien kanssa aktiviteetin sisällä -
android.app.FragmentTransaction
: Luokka atomisen fragmenttioperaatioiden suorittamiselle
käytettäessä Googlen toimittamaa yhteensopivuuspakettikirjastoa, toteutukseen käytetään seuraavia luokkia.
-
android.support.v4.app.FragmentActivity
: Kaikkien yhteensopivuuteen perustuvien fragmenttien (ja Kuormaajien) ominaisuuksia käyttävien toimintojen perusluokka android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
Android Fragment onCreateView ()
tässä on näytekappale, joka käyttää toteutuksessaan oncreateview-ohjelmaa ():
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()
menetelmä saa parametreiksi layoutinflaterin, katseluryhmän ja Paketin.
LayoutInflater
on komponentti, joka voi luoda näkymäesityksen XML-tiedostojen asettelun perusteella. Kuten näette, esimerkissä todella tehdään niin kutsumalla layout.inflate()
.
inflate()
menetelmä vaatii kolme parametria: asettelun XML-tiedoston id (sisällä R. layout), ylänäkymäryhmän, johon fragmentin näkymä lisätään, ja kolmannen Boolen, joka kertoo, tuleeko fragmentin näkymä ylennettynä asettelun XML-tiedostosta lisätä ylänäkymäryhmään. Tässä tapauksessa ohitamme false koska näkymä liitetään vanhemman ViewGroup muualla, joidenkin Android koodi kutsumme. Kun ohitat false viimeisenä parametrina täyttääksesi (), ylänäkymäryhmää käytetään edelleen täytetyn näkymän asettelulaskelmissa, joten et voi siirtää nullia ylänäkymäryhmäksi .
ViewGroup
parametri onCreateView() on se kantanäkymäryhmä, johon katkelman näkymä lisätään. Tämä on Näkymäryhmä toiminnan sisällä, joka ”isännöi” fragmenttia.
Bundle
parametri onCreateView() on nippu, johon fragmentti voi tallentaa dataa, aivan kuten aktiivisuudessa.
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
. Aloitetaan siis määrittelemällä fragmentit xml-asettelussa
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>
kuten voimme nähdä fragmenttien luokkatiedostot, jotka ovat osa tätä toimintoa, määritellään class= ”journaldev. com. fragments. fragments. TextFragment”
fragmenttiluokat ja niiden asettelut määritellään pätkiä alla.
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>
TextFragment koostuu Android-version nimen ja numeron omaavista tekstikatsomoista.
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>
Menufragmentissa näkyy Listanäkymä. Kuten voimme nähdä täällä, asettelu ListView on oletuksena simple_list_item_1 vastakohtana mukautetun asettelun loimme ListView edellisessä artikkelissa.
Pääaktiivisuus kutsuu setcontentview ’n onCreate-menetelmästä, that’ s it. Fragmentit kutsutaan xml-tiedostosta.
vaihtoehtoisesti voimme lisätä aktiivisuusluokan fragmentteja käyttämällä FragmentManager
kuten alla olevasta pätkästä näkyy:
getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();
tässä id fragmentParentViewGroup kuuluu alla näkyvään kehysriiheen:
<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 Example App
alla näkyy projektimme tuottama tuotos, näet että tässä on kaksi fragmenttia ja kun valitset niistä yhden vasemmasta sivujakeesta, tieto saa asuttu oikeanpuoleisessa sirpaleessa.
voit ladata lopullisen android fragment Projectin alla olevasta linkistä.