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

Documente similare
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

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

Laborator 3

Ingineria Sistemelor de Programare

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

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

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

Paradigme de Programare

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

Declararea variabilelor

Microsoft Word _POO_Lab_1_Modificari_v01.htm

tehnologii web

Ingineria Sistemelor de Programare

Top

Microsoft Word - CarteC.doc

PROGRAMARE ORIENTATA PE OBIECTE

CURS

Curs 10

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

Microsoft Word - lab4.doc

Paradigme de programare

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

Proiectarea Sistemelor Software Complexe

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

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

L7

PPSD

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

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

Slide 1

Diapositive 1

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

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

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

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

PHP (II)

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

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Limbaje de Programare Curs 8 – Fisiere

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

SUBPROGRAME

Microsoft Word - PCLP2_Curs_4_2019.doc

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

Introducere în limbajul JavaScript

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

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

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

MANUAL ULTRA ORIENTEERING CLASAMENTE SOFTWARE VERSION 1.0

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

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

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Informație și comunicare

Addendum Syllabus 6 Microsoft Word 2016 REF Syllabus 6.0 Crearea unui document nou pe baza unor șabloane disponibile local sau online Microsoft

Limbaje de Programare Curs 6 – Functii de intrare-iesire

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

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

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

Ggestiunea FNUASS

Aggregating Data

LUCRAREA NR

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

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 Word - 2 ES RO.doc

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

Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Pu

Slide 1

E_d_Informatica_sp_MI_2015_bar_02_LRO

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Utilizare Internet

Slide 1

Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Pu

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Laborator02

Informatică aplicată TEST GRILA TEST GRILĂ - REZOLVAT 1.Structura de principiu a unui sistem de calcul contine urmatoarele componente principale: A. u

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Krüger&Matz 10.1 TABLET WINDOWS 8.1 KM1081 Deutsch Română Polski English BEDIENUNGSANLEITUNG OWNER S MANUAL INSTRUKCJA OBSŁUGI MANUAL DE UTILIZARE

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

MyBRD Net Ghid practic de utilizare a Dispozitivului token

Tablouri (continuare)

Manual scurt pentru instalare rapida a Accesoriului Wi-Fi 1. Instalare fizica a accesoriului Wi-Fi 2. Intrare in modul AP pentru conectarea la reteaua

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

Programarea şi utilizarea calculatoarelor

PCLPII-C16(9)

în Tabletă convertibilă GHID DE UTILIZARE 8085 LKB001X CJB1FH002AZA

fm

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

Ghidul pentru utilizator

Ghid de referinţă rapidă pentru Seria ZT400™

Transcriere:

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 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: 1 M. Apetrii

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). 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. Informații suplimentare despre modul de utilizare al elementelor de tip Fragments se pot obține din curs sau de de la adresa: http://developer.android.com/guide/components/fragments.html Pentru exemplificare, urmați pașii prezentați mai jos: Pas 1 Creăm un nou proiect cu numele Ex_Fragments și FragmentActivity. Pas 2 In FragmentActivity.java vom avea public class FragmentActivity extends AppCompatActivity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_fragment); Pas 3 Pentru zona de import vom avea: import android.app.fragmenttransaction; import android.app.listfragment; import android.content.intent; import android.os.bundle; import android.app.activity; import android.app.fragment; import android.content.res.configuration; import android.support.v7.app.appcompatactivity; import android.util.typedvalue; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.listview; import android.widget.scrollview; import android.widget.textview; 2 M. Apetrii

Pas 4 In același folder cu FragmentActivity.java vom crea fișierul Resurse.java în care vom defini tablourile ce vor conține titlurile și valorile de afișat. public final class Resurse { * tabloul static cu lista titlurilor. public static final String[] TITLURI = { "TITLU I", "TITLU II", "TITLU III", "TITLU IV", "TITLU V" ; * tabloul static cu textele asociate titlurilor public static final String[] DETALII = { "Text asociat lui TITLU I.", "Text asociat lui TITLU II.", "Text asociat lui TITLU III.", "Text asociat lui TITLU IV.", "Text asociat lui TITLU V." ; Pas 6 Vom declara în clasa FragmentActivity fragment-ul din stânga, lista titlurilor. public static class FragmentTitluri extends ListFragment { public void onactivitycreated(bundle savedinstancestate) { super.onactivitycreated(savedinstancestate); // Populam lista dintr-un tablou static. setlistadapter(new ArrayAdapter<String>(getActivity(), android.r.layout.simple_list_item_activated_1, mape3.ex_fragments.resurse.titluri)); Pas 7 În folderul layout vom da fișierului activity_fragment.xml conținutul următor (pentru modul Portret) <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="mape3.ex_fragments.fragmentactivity$fragmenttitluri" 3 M. Apetrii

android:id="@+id/titluri" android:layout_width="match_parent" android:layout_height="match_parent" /> </merge> Pas 8 În folderul layout-land vom da fișierului activity_fragment.xml conținutul următor (pentru modul Landscape) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="mape3.ex_fragments.fragmentactivity$fragmenttitluri" android:id="@+id/titluri" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/detalii" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailselementbackground" /> </LinearLayout> Pas 9 Testam proiectul până în acest moment. În timpul testului, emulatorul poate comuta între modurile Portret/Landscape prin combinația de taste Ctrl+F11. Pas 10 În clasa FragmentTitluri definim variabilele: int elementselectat = 0; boolean tiplandscape; Pas 11 Funcției onactivitycreated din clasa FragmentTitluri îi adăugăm codul: // Testam daca este vizibil Activity-ul definit pentru modul Landscape View cadrudetalii = getactivity().findviewbyid(r.id.detalii); tiplandscape = cadrudetalii!= null && cadrudetalii.getvisibility() == View.VISIBLE; if (savedinstancestate!= null) { // determinam elenmentul selectat. elementselectat = savedinstancestate.getint("curchoice", 0); if (tiplandscape) { // afisam detalii despre elementul selectat getlistview().setchoicemode(listview.choice_mode_single); afiseazadetalii(elementselectat); 4 M. Apetrii

Pas 12 În clasa FragmentTitluri definim funcția afiseazadetalii * functia care afiseaza detalii despre elementul selectat void afiseazadetalii(int index) { elementselectat = index; if (tiplandscape) { // evidentiem elementul selectat getlistview().setitemchecked(index, true); //... else { //... Pas 13 Testam proiectul până în acest moment comutând între modurile Portret/Landscape. Pas 14 Vom declara în clasa FragmentActivity fragment-ul din dreapta care va contine detalii despre elementul selectat. public static class FragmentDetalii extends Fragment { * Cream o noua instanta pentru FragmentDetalii care va afisa textul corespunzator lui index. public static FragmentDetalii newinstance(int index) { FragmentDetalii f = new FragmentDetalii(); // preluam argumentele Bundle args = new Bundle(); args.putint("index", index); f.setarguments(args); return f; public int daindexselectat() { return getarguments().getint("index", 0); public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { if (container == null) { return null; //cream elementele pentru vizualizare ScrollView scroller = new ScrollView(getActivity()); TextView text = new TextView(getActivity()); int padding = (int)typedvalue.applydimension(typedvalue.complex_unit_dip, 4, getactivity().getresources().getdisplaymetrics()); text.setpadding(padding, padding, padding, padding); scroller.addview(text); text.settext(resurse.detalii[daindexselectat()]); 5 M. Apetrii

return scroller; Pas 15 În clasa FragmentTitluri modificăm funcția afiseazadetalii void afiseazadetalii(int index) { elementselectat = index; if (tiplandscape) { // evidentiem elementul selectat getlistview().setitemchecked(index, true); nevoie // Verificam ce element este deja afisat si il inlocuim daca este FragmentDetalii detalii = (FragmentDetalii) getfragmentmanager().findfragmentbyid(r.id.detalii); if (detalii == null detalii.daindexselectat()!= index) { // Construim un fragment nou detalii = FragmentDetalii.newInstance(index); // inlocuim fragmentul existent cu cel nou. FragmentTransaction ft = getfragmentmanager().begintransaction(); ft.replace(r.id.detalii, detalii); ft.settransition(fragmenttransaction.transit_fragment_fade); ft.commit(); else { //... Pas 16 Testam proiectul până în acest moment comutând între modurile Portret/Landscape. Pas 17 În clasa FragmentTitluri adăugăm metodele public void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putint("curchoice", elementselectat); public void onlistitemclick(listview l, View v, int position, long id) { afiseazadetalii(position); Pas 18 Testam proiectul până în acest moment comutând între modurile Portret/Landscape. 6 M. Apetrii

Pas 19 Pentru vizualizarea detaliilor și în modul Portret vom crea în FragmentActivity un nou Activity * Este al doilea "Activity" care se va afisa cand ecranul nu este suficient de lat (modul Portret). public static class DetaliiTitluActivity extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); if (getresources().getconfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE) { // nu este necesar in modul Landscape. finish(); return; if (savedinstancestate == null) { // facem legatura cu fragmentul FragmentDetalii. FragmentDetalii detalii = new FragmentDetalii(); detalii.setarguments(getintent().getextras()); getfragmentmanager().begintransaction().add(android.r.id.content, detalii).commit(); Pas 20 Adăugăm acest nou Activity în AndroidManifest.xml <activity android:name=".fragmentactivity$detaliititluactivity" /> Pas 21 În funcția afiseazădetalii, pe ramura else adăugăm // Lansam o noua activitate pentru a afisa afragentul cu detalii // despre elementul selectat. Intent intent = new Intent(); intent.setclass(getactivity(), DetaliiTitluActivity.class); intent.putextra("index", index); startactivity(intent); Pas 22 Testam proiectul în forma finală, comutând între modurile Portret/Landscape. Exemplu pentru utilizarea senzorilor (se utilizează și elemente de tip Fragment) 7 M. Apetrii