Android Fragment Cyklu
Dnes se budeme učit o Android Fragment životního Cyklu a zavést jednotný činnost třída skládající se ze dvou fragmentů v android aplikaci.
Fragment Android
Fragment
třída v Androidu se používá k vytváření dynamických uživatelských rozhraní. Fragment by měl být použit v rámci aktivity. Největší výhodou fragmentů je, že zjednodušuje úlohu vytváření uživatelského rozhraní pro více velikostí obrazovky. Aktivita může obsahovat libovolný počet fragmentů.
fragment Android není sám o sobě podtřída pohledu, který většina ostatních komponent UI jsou. Místo toho má fragment pohled uvnitř. Právě tento pohled je nakonec zobrazen uvnitř aktivity, ve které fragment žije.
protože fragment Androidu není pohled, přidání do aktivity vypadá poněkud jinak než přidání pohledu (např. Fragment je přidán do skupiny Zobrazení uvnitř aktivity. Pohled fragmentu je zobrazen uvnitř této skupiny Zobrazení.
ukazuje následující diagram znázorňuje, co se stane, když fragment je přidán k činnosti:
První činnost získá odkaz na fragment. Pak se dostane odkaz na ViewGroup pohled fragment bude vykreslen uvnitř. Potom aktivita přidá fragment. Fragment pak vytvoří svůj pohled a vrátí jej do aktivity. Pohled je poté vložen do rodiče ViewGroup a fragment je naživu.
životní cyklus fragmentu
životní cyklus fragmentu Android je znázorněn na obrázku níže.
Níže jsou uvedeny metody životního cyklu fragmentu.
-
onAttach()
:Tato metoda se bude jmenovat první, ještě předtím, než onCreate(), že nám vědět, že vaše fragment byl připojen k činnosti. Jste předáni aktivitě, která bude hostit váš fragment -
onCreateView()
: Systém volá toto zpětné volání, když je čas, aby fragment poprvé nakreslil své uživatelské rozhraní. Chcete-li nakreslit uživatelské rozhraní pro fragment, musí být z této metody vrácena komponenta View, která je kořenem rozvržení fragmentu. Můžeme vrátit null, pokud fragment neposkytuje UI -
onViewCreated()
: toto bude voláno po onCreateView(). To je zvláště užitečné, když zdědí onCreateView() implementace, ale musíme nakonfigurovat výsledné názory, jako s ListFragment a kdy nastavit adaptér -
onActivityCreated()
:To bude voláno po onCreate() a onCreateView(), což znamená, že aktivita onCreate() byla dokončena. Pokud tam je něco, co je potřeba, aby být spuštěn na fragment, který závisí na činnosti onCreate() po dokončení své práce pak onActivityCreated() může být použita pro inicializační práce -
onStart()
: onStart() metoda je volána, jakmile fragment dostane viditelné -
onPause()
: Systém volá tuto metodu jako první indikace, že uživatel opouští fragment. Toto je obvykle, kde byste se měli zavázat všechny změny, které by měly být trval mimo aktuální relaci uživatele -
onStop()
: Fragment bude zastaven voláním onStop() -
onDestroyView()
: jmenuje se To před onDestroy(). Toto je protějšek k onCreateView (), kde jsme nastavili uživatelské rozhraní. Pokud existují věci, které je třeba vyčistit specifické pro uživatelské rozhraní, pak tato logika může být vložena do onDestroyView () -
onDestroy()
: onDestroy () vyzval k závěrečnému vyčištění stavu fragmentu, ale není zaručeno, že bude volán platformou Android. -
onDetach()
: jmenuje se po onDestroy(), oznámit, že fragment byl odtržený od své hostingové aktivity
Android Fragment Třídy
Fragmenty byly přidány do Android API v Honeycomb(API 11).
-
android.app.Fragment
: základní třída pro všechny fragment definice -
android.app.FragmentManager
: Třídy pro interakci s objekty fragment uvnitř činnost -
android.app.FragmentTransaction
: třída pro provádění atomové sada fragment operace
Při použití kompatibilita package library poskytované společností Google, tyto třídy jsou používány pro implementaci.
-
android.support.v4.app.FragmentActivity
: Základní třída pro všechny aktivity, pomocí kompatibility založené na fragment (a nabíječ) funkce android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
Android Fragment onCreateView()
Zde je ukázka fragmentu pomocí onCreateView() pro jeho provádění:
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()
metoda dostane LayoutInflater, ViewGroup a Svazek jako parametry.
LayoutInflater
je komponenta, která může vytvořit instanci zobrazení na základě souborů XML rozvržení. Jak vidíte, příklad to skutečně dělá voláním layout.inflate()
.
inflate()
metoda přebírá tři parametry: id rozvržení XML soubor (uvnitř R. layout), ViewGroup parent, do kterého je fragment Názor má být vložen, a třetí boolean říct, zda fragment je Zobrazit, jak nafouknutý z rozvržení XML soubor by měl být vložen do mateřské ViewGroup. V tomto případě projdeme false, protože pohled bude připojen k nadřazené ViewGroup jinde, některým kódem Android, který nazýváme. Když předáte false jako poslední parametr inflate(), parent ViewGroup je stále používá pro rozložení výpočtů nafouknuté Výhled, takže si nelze předat null jako parent ViewGroup .
ViewGroup
parametr onCreateView() je ViewGroup parent, do kterého je Výhled na fragment má být vložen. Toto je skupina zobrazení uvnitř aktivity, která bude“ hostit “ fragment.
Bundle
parametr onCreateView() je Svazek, ve kterém fragment může uložit data, stejně jako v Činnosti.
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
. Tak umožňuje začít s definováním fragmenty v 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>
Jak můžeme vidět class soubory na fragmenty, které jsou součástí této aktivity jsou definovány jako class=“journaldev.kom.úlomky.úlomky.TextFragment“
fragment tříd a jejich rozložení jsou definovány, jak je znázorněno na úryvky níže.
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 se skládá z textviews drží android verze jméno a číslo.
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>
MenuFragment zobrazí ListView. Jak vidíme zde, rozložení ListView je výchozí simple_list_item_1 na rozdíl od vlastního rozvržení, které jsme vytvořili pro ListView v předchozím článku.
MainActivity vyvolá setContentView z metody onCreate, to je vše. Fragmenty jsou volány ze souboru xml.
alternativně můžeme přidat fragmenty ze třídy Aktivity pomocí FragmentManager
, jak je znázorněno v úryvku níže:
getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();
id fragmentParentViewGroup patří do FrameLayout je uvedeno níže:
<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 Příklad Aplikace
Níže ukazuje výstup produkován náš projekt, můžete vidět, že dva fragmenty jsou zde přítomni, a vyberete-li některý z nich na levé straně fragmentu, údaje se vyplní na pravé straně fragmentu.
zde si můžete stáhnout finální Android fragment projekt z níže odkazu.