Curs 6 Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate reut

Documente similare
Laborator Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate r

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Laborator 3

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Proiectarea Sistemelor Software Complexe

Ingineria Sistemelor de Programare

Declararea variabilelor

Curs 10

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

PROGRAMARE ORIENTATA PE OBIECTE

CURS

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft Word - lab4.doc

Biomedical Wi-Fi data transmissons

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Paradigme de Programare

Introducere în limbajul JavaScript

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 1. Google Drive, Google Calendar, WeTr

Top

Raportarea serviciilor de dializă la nivel CNAS

tehnologii web

Manual de utilizare a Sistemului Informațional al Institutului Național al Justiției (SI INJ) intranet.inj.md Ver.2 Manual de utilizare a Sistemului I

Microsoft Word - CarteC.doc

Raportarea serviciilor de dializă la nivel CJAS

Platforma 5. 1 Introducere in MSSQL Introducere Pe parcursul ultimilor ani, se poate observa o cuplare a limbajelor de programare majore cu tipuri de

Manual de utilizare Room Booking System

Paradigme de programare

EXCEL FĂRĂ SECRETE Grafice şi diagrame

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Gestiunea serviciilor de recuperare a sănătăţii în sanatorii şi preventorii

Microsoft Word - MANUAL_APP_ROMPOS_V7.docx

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 3. Achizitionarea domeniilor web si a

PowerPoint Presentation

Microsoft Word - PDS_proiect5_2019

e-learning Agronomie Platforma de e-learning Versiunea: Ghid de utilizare Beneficiar: UNIVERSITATEA DE STIINTE AGRONOMICE SI MEDICINA VETERINARA

Furnicuţa şi-a construit un depozit pentru grăunţe

Ingineria Sistemelor de Programare

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

Settlement participant system

Crearea ghidului de studiu Syllabus

FONDUL SOCIAL EUROPEAN

LABORATOR 1. Stocarea si partajarea fisierelor online cu ajutorul Dropbox, WeTransfer.com PREZENTAREA LUCRĂRII DE LABORATOR Lucrarea de laborator îşi

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 6. Vizualizarea statisticilor prin int

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Ghid de Referință Explicații sumare ale operațiunilor de rutină HL-L2312D HL-L2357DW HL-L2352DW HL-L2372DN HL-L2375DW Brother recomandă să păstrați ac

Gestiunea serviciilor de recuperare a sănătăţii în sanatorii şi preventorii

CABINET MINISTRU

Inserarea culorilor in tabele

Informație și comunicare

Slide 1

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

Minicurs CCS C / Aplicatia1 1.Programul CCS C Compiler. Instalare.Creare proiect. Descarcati ultima versiune a programului de

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Evaluarea unităţilor de dializă publice si private

A.E.F. - suport laborator nr.5 sem.ii Analiza suprafețelor prin utilizarea elementelor 2D În acest laborator sunt atinse următoarele aspecte: realizar

PPSD

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Lucrarea 10

GHID PENTRU RESETAREA PAROLEI Informații Generale Din dorința de a facilita procesul de autentificare, chiar dacă nu mai cunoașteti datele necesare, a

R E G U L A M E N T U L privind utilizarea Sistemului Informațional Automatizat Acreditare (SIA Acreditare) în cadrul Centrului Național de Acreditare

PowerPoint Presentation

Microsoft Word - 2 ES RO.doc

EVALUARE NAȚIONALĂ CLASA A VIII-A 2017 FLUX DE LUCRU PENTRU UTILIZATOR DE TIP CENTRU DE ÎNSCRIERE (CI)

Ggestiunea FNUASS

Curs de formare Informatică și TIC pentru clasa a V-a Portofoliu pentru evaluarea finală Tema: ELEMENTE DE INTERFAŢĂ ALE UNUI SISTEM DE OPERARE (DESKT

MyBRD Net Ghid practic de utilizare a Dispozitivului token

Limbaje de Programare Curs 8 – Fisiere

MANUAL ULTRA ORIENTEERING CLASAMENTE SOFTWARE VERSION 1.0

A.E.F. - suport laborator nr.10 sem.ii Analiza stării de contact între elemente 3D În acest laborator sunt atinse următoarele aspecte: analiza contact

REVISAL Versiunea: Data release: 15 martie 2016 IMPORTANT! Distribuţia curentă (v6.0.4) a aplicaţiei Revisal conţine nomenclatorul COR ISCO 08 î

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

Laborator 5 - Paradigme de Programare

manual_ARACIS_evaluare_experti_v4

A.E.F. - suport laborator nr.3 sem.ii Aplicațe privind utilizarea rețelelor 1D În acest laborator sunt atinse următoarele aspecte: realizarea schițelo

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

manual_ARACIS_evaluare_experti_v5

Agenţia de Dezvoltare Regională (ADR) Nord-Vest vă invită la lansările regionale a trei domenii majore de intervenţie aferente Programului Operaţional

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Ch

Aggregating Data

Ghid de utilizare pentru Platforma E-Admitere intranet.inj.md

Programarea şi utilizarea calculatoarelor

A.E.F. - suport laborator nr.8 sem.ii Analiza structurală la flambaj În acest laborator sunt atinse următoarele aspecte: modalitatea de analiză la fla

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 4. Dezvoltarea site-urilor si blog-uri

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Ghid de referinţă rapidă pentru Seria ZT400™

Microsoft Word - MI_05_009_Prescriere_1.doc

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

PHP (II)

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Web Social FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 2. Dezvoltarea blogurilor prin intermediul WordPress.com PREZE

Lucrarea nr. 9 - Liste dublu înlănţuite Breviar teoretic În cadrul elementelor studiate anterior s-a putut observa utilitatea listelor simplu înlănuit

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Transcriere:

Curs 6 Fragments Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe fragmente ți un fragment se poate reutiliza în activități multiple. Un fragment poate fi privit ca secțiunea modulară a unei activități care are propriul său ciclu de viață, primește propriile evenimente de intrare și care poate fi adăugată sau eliminată în timp ce activitatea se execută. Un fragment trebuie să fie întotdeauna încorporat într-o activitate și ciclul de viață al fragmentului este afectat în mod direct de ciclul de viață al activității gazdă. De exemplu, atunci când activitatea este întreruptă sunt întrerupte toate fragmentele sale, iar atunci când activitatea este distrusă sunt distruse toate fragmentele. Când o activitate rulează, fragmentele sale pot fi manipulate independent, putând fi adăugate sau să eliminate. Acest lucru este deosebit de important, deoarece un fragment modular permite diverse combinații de fragmente pentru diferite dimensiuni de ecran. (sursa: android.com) Un fragment poate fi adăugat unui Activity direct în fișierul xml (layout) cu tagul <fragment>, sau din cod prin adăugarea acestuia la un ViewGroup existent. Fragmentele se utilizează cel mai des pentru: Reutilizarea unor părți ale ecranului, inclusiv vizualizarea și logica evenimentelor, în moduri diferite, în activități diferite (ex.: utilizarea aceleiași liste în diferite surse de date dintr-o aplicație). 1 M. Apetrii

Adaptarea conținutului la dimensiunile ecranului (ex.: versiunea de tabletă a unei activități are un aspect mult diferit față de versiunea pentru telefon, diferit față de de versiunea pentru TV). Adaptarea conținutului la orientarea ecranului (ex.: versiunea portret a unei activități are un aspect mult diferit față de versiunea peisaj). Fragmentele permit ambelor orientări să reutilizeze elementele partajate. Un fragment, la fel cu o activitate, are un fișier XML (de aspect) și o clasă Java care trebuie să moștenească clasa Fragment. Pentru a putea încorpora un fragment, activitatea trebuie să moștenească clasa FragmentActivity sau AppCompatActivity, care adaugă suport pentru managerul de fragmente. Exemplu: ex_fragment.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textview" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" /> </LinearLayout> FragmentulMeu.java public class FragmentulMeu extends Fragment { public View oncreateview(layoutinflater inflater, ViewGroup parent, Bundle savedinstancestate) { // Definim fisierul xml al fragmentului return inflater.inflate(r.layout.ex_fragment, parent, false); // se apeleaza imediat dupa oncreateview(). public void onviewcreated(view view, Bundle savedinstancestate) { //orice configurare pentru elemente de tip View trebuie sa apara aici // Parametrul parent trecut la oncreateview() este părintele ViewGroup (de la aspectul activității), în care va fi inserat fragmentul. Parametrul savedinstancestate este un Bundle care furnizează date referitoare la instanța anterioară a fragmentului, dacă fragmentul 2 M. Apetrii

este reluat. Metoda inflate() are trei argumente: ID-ul de resursei (layout-ului) Elementul de tip ViewGroup care va fi parintele layout-ului fragmentului. O variabilă booleană care indică dacă layout-ul fragmentului sa fie sau nu atașat la ViewGroup-ul parinte (al doilea parametru) Există două moduri de a adăuga un fragment unei activități: dinamic folosind Java și static folosind XML. Modul static direct in XML <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:name="mape3.ex_fragments.fragmentulmeu" android:id="@+id/fragmentulmeu" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> Modul dinamic- în codul Java <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/id_fragment" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout> FragmentTransaction ft = getsupportfragmentmanager().begintransaction(); ft.add(r.id.your_placeholder, new FragmentulMeu()); ft.commit(); În metoda add() primul argument este ViewGroup-ul în care trebuie plasat fragmentul specificat prin ID, iar al doilea parametru este fragmentul de adăugat. La final trebuie apelată metoda commit(), pentru ca modificările să aibă efect. Managementul fragmentelor într-un activity este un element de tip FragmentManager, care poate fi obținut prin metoda getfragmentmanager(). Printre altele, acesta dă fragmente care există în activitate, cu findfragmentbyid()sau findfragmentbytag(), elimina 3 M. Apetrii

fragmente din stiva cu popbackstack(), înregistrează un ascultător pentru modificări ale stivei, cu addonbackstackchangedlistener (). Ca răspuns la interacțiunea cu utilizatorul, un fragment poate fi adăugat (add()), eliminat (remove()), înlocuit (replace()) etc. O asemenea operație se numește o tranzacție și poate fi efectuată folosind FragmentTransaction. O asemenea instanță se poate obține din FragmentManager cu begintransaction(). Exemplu de înlocuire a unui fragment cu altul (cu păstrarea stării anterioare în stivă): // Cream un fragment si o tranzactie Fragment newfragment = new ExempluFragment(); FragmentTransaction transaction = getfragmentmanager().begintransaction(); // Inlocuim continutul vechi din fragment_container cu acest // fragment si adaugam tranzactia in stiva transaction.replace(r.id.fragment_container, newfragment); transaction.addtobackstack(null); // Se executa tranzactia (operatia) transaction.commit(); Prin apelarea addtobackstack(), tranzacția este salvată în stivă, astfel încât utilizatorul poate să aducă înapoi fragmentul anterior prin apăsarea butonului Back. Pentru a prelua fragmente din stiva, trebuie să suprascriem metoda onbackpressed () în activitatea principală: public void onbackpressed() { if (getfragmentmanager().getbackstackentrycount() > 0) { getfragmentmanager().popbackstack(); else { super.onbackpressed(); Dacă nu se suprascrie metoda onbackpressed() și există o activitate anterioară în stivă, apăsarea butonului Back va face ca aplicația să revină la această activitate. Dacă nu există o activitate anterioară în stivă, apăsarea butonului Back va face ca aplicația să se închidă. Un fragment conține metode similare cu o activitate, cum ar fi oncreate(), onstart(), onpause() și onstop(). Ciclul de viață al unui fragment este prezentat în figura de mai jos. 4 M. Apetrii

(sursa: android.com) Principalele metode care ar trebui suprascrie: oncreate() Sistemul invocă această metodă la crearea fragmentului. De obicei aici se inițializează componentele esențiale ale fragmentului. oncreateview() Sistemul invocă această metodă atunci când se desenează interfața cu utilizatorul a fragmentului. Această metodă trebuie să întoarcă un element de tipul View. Se poate returna null dacă fragmentul nu oferă o interfață de utilizare. Elementul de tip View returnat de oncreateview() se poate obține dintr-un fisier xml definit în folderul layout. onattach() Sistemul invocă această metodă la atașarea fragmentului la o activitate. onpause() Sistemul invocă această metodă atunci când utilizatorul da primul semn că utilizatorul părăsește fragmentul (aceasta nu înseamnă întotdeauna că fragmentul este distrus). Se folosește de obicei pentru a salvarea datelor în afara sesiunii utilizatorului curent (persistența datelor). 5 M. Apetrii

Comunicarea cu fragmentele În general fragmentele comunică numai cu activitatea părinte, permițând activității să gestioneze intrările și ieșirile de date din fiecare fragment. Excepție de la această regulă fac fragmentele de dialog dintr-un alt fragment sau fragmentele copii imbricate. Ambele cazuri sunt situații în care un fragment a imbricat fragmente copil și, prin urmare, li se permite să comunice în sus către părintele lor (care este un fragment). Există trei moduri în care un fragment și o activitate pot comunica: Bundle - Activitatea poate construi un fragment și poate crea argumente Metode - Activitatea poate apela metode ale unui fragment Listener - Fragmentul poate declanșa evenimente ascultător la o activitate prin intermediul unei interfețe Comunicarea cu un fragment este, în general, astfel: activitățile pot crea fragmente cu date în timpul execuției activitățile pot transmite date către fragmente existente utilizând metodele ale acestuia fragmentele pot comunica cu activitatea părinte folosind o interfață și ascultători fragmentele care trebuie să transmită date altor fragmente fac acest lucru prin intermediul activității părinte fragmentele pot transmite date către și din fragmente de dialog, fragmente copil imbricate Comunicarea prin intermediul argumentelor: Deoarece clasa Fragment are doar un constructor fără argumente, se va declara o metodă statică newinstance care va crea un Fragment cu argumente, utilizând metoda setarguments. Exemplu: public class DemoFragment extends Fragment { public static DemoFragment newinstance(int argint, String argstr) { DemoFragment fragmentdemo = new DemoFragment(); Bundle args = new Bundle(); args.putint("numar", argint); args.putstring("titlu", argstr); fragmentdemo.setarguments(args); return fragmentdemo; Argumentele vor putea fi accesate în metoda oncreate. public class DemoFragment extends Fragment { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // preluam argumentele int nr = getarguments().getint("numar", 0); String titlu = getarguments().getstring("titlu", ""); În activitatea parinte, fragmentul se poate încărca dinamic astfel: 6 M. Apetrii

FragmentTransaction ft = getsupportfragmentmanager().begintransaction(); DemoFragment fragmentdemo = DemoFragment.newInstance(10, "Un titlu"); ft.replace(r.id.fragmentulmeu, fragmentdemo); ft.commit(); Comunicarea prin intermediul metodelor: Dacă activitatea părinte dorește să transmită date către un fragment, poate face lucrul acesta invocând o metodă a acestuia prin intermediul managerului de fragmente. Exemplu: public class DemoFragment extends Fragment { public void metoda_de_executat(string arg) { public class MainActivity extends AppCompatActivity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); DemoFragment fragmentdemo = (DemoFragment) getsupportfragmentmanager().findfragmentbyid(r.id.fragmentulmeu); fragmentdemo.metoda_de_executat("lista parametri"); Comunicarea prin intermediul ascultătorilor: Dacă fragmentul trebuie să comunice cu activitatea atunci acesta poate defini o interfață care va fi implementată de către activitate. Exemplu: (android.com) public class MyListFragment extends Fragment { // Definim ascultatorul interfetei private OnItemSelectedListener listener; // Definim evenimentul folosit de fragment pentru comunicare public interface OnItemSelectedListener { // pot fi oricate public void onrssitemselected(string link); // Pastram ascultatorul (activitatii) public void onattach(context context) { super.onattach(context); if (context instanceof OnItemSelectedListener) { listener = (OnItemSelectedListener) context; else { throw new ClassCastException(context.toString() + " clasa trebuie sa implementeze MyListFragment.OnItemSelectedListener"); 7 M. Apetrii

// Putem apela metoda asociata evenimentului, pentru transmiterea valorilor catre activitatea parinte public void onsomeclick(view v) { listener.onrssitemselected("some link"); // Activitatea va implementa interfata ascultator a fragmentului public class RssfeedActivity extends AppCompatActivity implements MyListFragment.OnItemSelectedListener { // Un fragment caruia dorim sa-i trimitem datele DetailFragment fragment; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_rssfeed); // identificam fragmentul dupa id fragment = (DetailFragment) getsupportfragmentmanager().findfragmentbyid(r.id.detailfragment); // Definim metoda ce se va apela cand fragmentul solicita // Este implementarea pentru metoda interfetei `OnItemSelectedListener` public void onrssitemselected(string link) { if (fragment!= null && fragment.isinlayout()) { fragment.settext(link); FragmentManager este responsabil pentru gestionarea în timp a fragmentelor, inclusiv adăugarea, eliminarea, ascunderea, afișarea sau navigarea în alt mod între fragmente. Acesta este de asemenea responsabil pentru găsirea fragmentelor în cadrul unei activități. Metodele importante disponibile sunt: Metodă Descriere addonbackstackchangedlistener begintransaction() findfragmentbyid(int id) Adăugați un nou ascultător pentru modificarea stivei de fragmente. Creează o nouă tranzacție pentru a schimba fragmente în timpul rulării. Găsește un fragment după id, de obicei dat în structura XML. 8 M. Apetrii

Metodă Descriere findfragmentbytag(string tag) popbackstack() executependingtransactions() Găsește un fragment după etichetă, de obicei, pentru un fragment adăugat în execuție. Elimină un fragment din stivă. Forțează aplicarea tranzacției angajate. ActionBar Menu Items Deseori, in programele noastre avem nevoie de meniuri specifice fragmentelor, care apar numai pentru fragmentul respectiv. Acest lucru se poate face prin adăugarea directă a metodei oncreateoptionsmenu la fragment. Aceasta funcționează la fel ca cea pentru activitate: public void oncreateoptionsmenu(menu menu, MenuInflater inflater) { inflater.inflate(r.menu.fragment_menu, menu); Trebuie apoi notificat fragmentul că elementele meniului trebuie încărcate odata cu fragmentul: public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sethasoptionsmenu(true); Un click pe un element din meniu poate fi captat prin proprietatea onclick sau prin intermediul metodei onoptionsitemselected din fragment: public boolean onoptionsitemselected(menuitem item) { // handle item selection switch (item.getitemid()) { case R.id.edit_item: // do s.th. return true; default: return super.onoptionsitemselected(item); (sursa: android.com) 9 M. Apetrii

Subclase ale clasei Fragment care pot fi moștenite: DialogFragment Folosită pentru crearea casetelor de dialog ListFragment Afișează o listă de elemente care sunt gestionate de un adapter, similar cu ListActivity. Acesta oferă mai multe metode, una din cele mai des folosite fiind onlistitemclick() (se apelează atunci când se selectează un element din listă). 10 M. Apetrii