Articles

Android Fragment Lifecycle

astăzi vom afla despre Android Fragment Lifecycle și să pună în aplicare o singură clasă de activitate format din două fragmente în aplicație android.

Android Fragment

Fragment clasa în Android este folosit pentru a construi interfețe de utilizator dinamice. Fragmentul trebuie utilizat în cadrul activității. Un mare avantaj al fragmentelor este că simplifică sarcina de a crea UI pentru mai multe dimensiuni de ecran. O activitate poate conține orice număr de fragmente.

un fragment Android nu este de la sine o subclasă de vedere care sunt cele mai multe alte componente UI. În schimb, un fragment are o vedere în interiorul său. Această viziune este în cele din urmă afișată în interiorul activității în care trăiește fragmentul.

deoarece un fragment android nu este o vizualizare, adăugarea acestuia la o activitate pare oarecum diferită de adăugarea unei vizualizări (de exemplu, TextView). Un fragment este adăugat la un ViewGroup în interiorul activității. Vizualizarea fragmentului este afișată în interiorul acestui ViewGroup.

următoarea diagramă prezintă ce se întâmplă atunci când un fragment este adăugat la o activitate:

fragment android

Mai întâi activitatea obține o referință la fragment. Apoi devine o referință la ViewGroup vizualizarea fragmentului va fi redată în interior. Apoi activitatea adaugă fragmentul. Fragmentul își creează apoi vizualizarea și îl readuce la activitate. Vizualizarea este apoi inserată în părintele ViewGroup, iar fragmentul este viu.

Fragment ciclul de viață

Android fragment ciclul de viață este ilustrat în imaginea de mai jos.

Android fragment ciclului de viață

mai jos sunt metodele de fragment ciclului de viață.

  1. onAttach(): această metodă va fi apelată mai întâi, chiar înainte de onCreate(), anunțându-ne că fragmentul dvs. a fost atașat la o activitate. Sunteți trecut activitatea care va găzdui fragmentul
  2. onCreateView() : Sistemul apelează acest apel invers atunci când este timpul ca fragmentul să-și deseneze interfața de utilizare pentru prima dată. Pentru a desena o interfață pentru fragment, o componentă de vizualizare trebuie returnată din această metodă, care este rădăcina aspectului fragmentului. Putem returna null dacă fragmentul nu oferă o interfață
  3. onViewCreated(): aceasta va fi apelată după onCreateView(). Acest lucru este deosebit de util atunci când moștenirea punerea în aplicare onCreateView (), dar avem nevoie pentru a configura vizualizările rezultate, cum ar fi cu un ListFragment și când să configurați un adaptor
  4. onActivityCreated() :Aceasta va fi apelată după onCreate () și onCreateView (), pentru a indica faptul că activitatea onCreate () a fost finalizată. Dacă există ceva care este necesar pentru a fi inițializat în fragmentul care depinde de onCreate activității() au finalizat activitatea sa, apoi onActivityCreated() poate fi folosit pentru acea lucrare de inițializare
  5. onStart() : onStart() metoda este numit odată ce fragmentul devine vizibil
  6. onPause() : sistemul numește această metodă ca prima indicație că utilizatorul părăsește fragmentul. Acest lucru este, de obicei, în cazul în care ar trebui să comită orice modificări care ar trebui să fie persistat dincolo de sesiunea curentă de utilizator
  7. onStop() : Fragment va fi oprit prin apelarea onStop()
  8. onDestroyView() : se numește înainte de onDestroy(). Acesta este omologul onCreateView() în cazul în care ne-am înființat UI. Dacă există lucruri care sunt necesare pentru a fi curățate specifice UI, apoi că logica poate fi pus în onDestroyView ()
  9. onDestroy() : onDestroy () chemat să facă curățarea finală a stării fragmentului, dar nu este garantat să fie apelat de platforma Android.
  10. onDetach() : se numește după onDestroy(), pentru a notifica că fragmentul a fost disociat de activitatea sa de găzduire

clase de fragmente Android

fragmente au fost adăugate la API-ul Android în Honeycomb(API 11).

  1. android.app.Fragment: clasa de bază pentru toate definițiile fragmentelor
  2. android.app.FragmentManager : Clasa pentru interacțiunea cu obiecte fragment în interiorul unei activități
  3. android.app.FragmentTransaction : clasa pentru efectuarea unui set atomic de operații fragment
  4. atunci când se utilizează o bibliotecă de pachete de compatibilitate furnizate de Google, următoarele clase sunt utilizate pentru punerea în aplicare.

  • android.support.v4.app.FragmentActivity : Clasa de bază pentru toate activitățile care utilizează fragment pe bază de compatibilitate (și încărcător) caracteristici
  • android.support.v4.app.Fragment
  • android.support.v4.app.FragmentManager
  • android.support.v4.app.FragmentTransaction
  • Android fragment onCreateView()

    iată un fragment eșantion folosind oncreateview() pentru punerea sa în aplicare:

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 devine un layoutinflater, un viewgroup și un pachet ca parametri.

LayoutInflater este o componentă care poate crea o instanță de vizualizare bazată pe fișiere XML de aspect. După cum puteți vedea, exemplul face acest lucru apelând layout.inflate().

inflate() metoda are trei parametri: id-ul unui fișier XML layout (în interiorul R. layout), un grup de vizualizare părinte în care trebuie inserată vizualizarea fragmentului și un al treilea boolean care spune dacă vizualizarea fragmentului ca umflată din fișierul XML layout ar trebui inserată în grupul de vizualizare părinte. În acest caz, vom trece false, deoarece vizualizarea va fi atașată la grupul de vizualizare părinte în altă parte, de o parte din Codul Android pe care îl numim. Când treceți false ca ultimul parametru pentru a umfla (), grupul de vizualizare părinte este încă utilizat pentru calculele de aspect ale Vizualizării umflate, deci nu puteți trece null ca grup de vizualizare părinte .

ViewGroup parametrul onCreateView() este grupul de vizualizare părinte în care trebuie inserată vizualizarea fragmentului. Acesta este un grup de vizualizare din interiorul activității care va „găzdui” fragmentul.

Bundle parametrul onCreateView() este un pachet în care fragmentul poate salva date, la fel ca într-o activitate.

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. Deci, să începem cu definirea fragmentelor în aspectul xml

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>

după cum putem vedea fișierele de clasă ale fragmentelor care fac parte din această activitate sunt definite ca class=”journaldev.com.Fragmente.Fragmente.TextFragment”

clasele de fragmente și machetele lor sunt definite așa cum se arată fragmente de mai jos.

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 cuprinde textviews care dețin numele și numărul versiunii android.

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>

Menufragmentarea afișează o listă. După cum putem vedea aici, aspectul ListView este implicit simple_list_item_1 opus aspectului personalizat pe care l-am creat pentru ListView în articolul anterior.

activitatea principală invocă setContentView din metoda onCreate, asta este. Fragmentele sunt numite din fișierul xml.

alternativ, putem adăuga fragmentele din clasa de activitate folosind FragmentManager așa cum se arată în fragmentul de mai jos:

getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();

aici ID fragmentParentViewGroup aparține FrameLayout prezentat mai jos:

<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 exemplu App

de mai jos arată de ieșire produs de proiectul nostru, puteți vedea că două fragmente sunt prezente aici și atunci când selectați oricare dintre ele în fragmentul din partea stângă, datele populat în fragmentul din partea dreaptă.

android fragmente exemplu, fragment ciclul de viață

puteți descărca proiectul final android fragment de mai jos link-ul.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *