This is an old revision of the document!


Laborator 6 - Biblioteci

Fragmente

În laboratoarele precedente ați învățat despre activități, cum funcționează acestea, și cum le putem conecta între ele. Astăzi vom lucra cu Fragmente. În Android, un Fragment este o clasă ce reprezintă o componentă independentă ce se execută în contextul unei activități.

De ce folosim fragmente? Fragmentele au fost introduse începând cu Android 3.0 (API level 11), iar scopul lor este de a facilita crearea de interefețe ce se pot adapta diferitelor tipuri de ecrane.

Mai pe scurt, un fragment poate fi văzut ca o porțiune de interfață ce poate fi refolosită în cadrul mai multor activități sau pentru o poziționare diferită a aceleiași interfețe - dacă folosim alte tipuri de ecrane (exemplu în figura de mai jos).

Ciclul de viață al unui fragment

Deși se execută în cadrul contextului unei activități, fragmentele au propriul lor ciclu de viață, propriile evenimente și pot fi adăugate sau șterse, chiar dacă activitatea de care aparține este în curs de execuție. Ciclul de viață al fragmentului este dependent de cel al activității sale. De aceea, dacă o activitate apelează onPause(), atunci toate fragmentele sale vor avea această stare.

  • Metoda onCreate() este apelată după apelul onCreate() al activității.
  • Metoda onCreateView() este apelată atunci când fragmentul trebuie să creeze interfața grafică.
  • Metoda onActivityCreated() este apelată după metoda onCreateView(), atunci când activitatea a fost creată.
  • Metoda onStart() este apelată odată ce fragmentul devine vizibil.

Atenție: Fragmentele nu moștenesc clasa Context. Pentru a avea acces la activitatea “gazdă”, trebuie să folosiți metoda getActivity()

Crearea unui fragment

Pentru a scrie un fragment, trebuie să creați o clasă care să moștenească clasa Fragment. Așa cum ați văzut în laboratorul despre activități, puteți suprascrie diverse metode (descrise mai sus) care pot modifica un fragment de-a lungul ciclului său de viață.

public class MyFirstFragment extends Fragment {
 
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
      // Inflate the layout for this fragment
      return inflater.inflate(R.layout.my_first_fragment, container, false);
  }
}

În exemplul de mai sus am creat o clasă de tip Fragment, în care putem observa că am suprascris metoda onCreateView(). Așa cum am spus mai sus, această metodă este folosită pentru a crea componentele interfeței(din fișierul .xml) corespunzătoare fragmentului.

Parametrii acestei metode sunt următorii:

  • inflater : încărcarea layout-ului (fișierul .xml) ;
  • container : dacă este non null, corespunde unui view “părinte” unde ar trebui integrată interfața fragmentului
  • savedInstanceState : dacă este non-null, fragmentul este reconstruit pe baza unei stări salvate anterior, transmisă prin acest parametru.

Fragmentele sunt de două tipuri: statice(definite o singură dată în fișierul layout - nu pot fi suprimate sau inlocuite) și dinamice. În acest laborator nu vom intra în detalii în ceea ce privește fragmentele statice, însă este important să știți de existența lor.

Exercitii

  1. Modificati laboratoarele anterioare astfel incat sa folositi ButterKnife
  2. Afisati pe harta (Google Maps) unde este facultatea Google Maps
pdm/laboratoare/06.1459323525.txt.gz · Last modified: 2016/03/30 10:38 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0