Articles

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:

android fragment

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.

Android fragment lifecycle

Níže jsou uvedeny metody životního cyklu fragmentu.

  1. 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
  2. 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
  3. 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
  4. 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
  5. onStart() : onStart() metoda je volána, jakmile fragment dostane viditelné
  6. 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
  7. onStop() : Fragment bude zastaven voláním onStop()
  8. 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 ()
  9. 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.
  10. 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).

  1. android.app.Fragment : základní třída pro všechny fragment definice
  2. android.app.FragmentManager : Třídy pro interakci s objekty fragment uvnitř činnost
  3. android.app.FragmentTransaction : třída pro provádění atomové sada fragment operace
  4. 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

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.

Android fragmenty příklad, fragment životní cyklus

zde si můžete stáhnout finální Android fragment projekt z níže odkazu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *