[Curs Android] C07 - Liste (IPW 2011)

34
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea Android Model View Controller, Observer, liste, adaptoare si reciclare Vlad PETRE vlad@vladpetre.com http://twitter.com/vladpetre88 http://facebook.com/vladpetre88 http://www.linkedin.com/in/ vladpetre88

description

These slides are part of the Android Development Course which I taught to 10 students, while participating in the IP Workshop Summer School 2011. http://www.scoaladevara.info/2011/?page_id=39

Transcript of [Curs Android] C07 - Liste (IPW 2011)

Page 1: [Curs Android] C07 - Liste (IPW 2011)

1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AndroidModel View Controller, Observer,

liste, adaptoare si reciclare

Vlad PETRE

[email protected]

http://twitter.com/vladpetre88

http://facebook.com/vladpetre88

http://www.linkedin.com/in/vladpetre88

Page 2: [Curs Android] C07 - Liste (IPW 2011)

2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Model View Controller (I)• Architectural Pattern• Separa

– Interfata grafica– Programul in sine– Stocarea datelor

• Avantaje– Programare pe componente– Usor de intretinut

• Dezavantaje– Poate fi lent

Page 3: [Curs Android] C07 - Liste (IPW 2011)

3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Model View Controller (II)

Page 4: [Curs Android] C07 - Liste (IPW 2011)

4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Model View Controller (III)

• Linie continua – asociere directa• Linie intrerupta – asociere indirecta (ex: Observer)

Page 5: [Curs Android] C07 - Liste (IPW 2011)

5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Model View Controller (IV)

Page 6: [Curs Android] C07 - Liste (IPW 2011)

6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Observer (I)

Page 7: [Curs Android] C07 - Liste (IPW 2011)

7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Observer (II)• Design Pattern• Separa

– Obiectul observat– Observator

• Avantaje– Programare pe componente– Usor de intretinut– Schema generalizata

• Dezavantaje– Poate fi lent

Page 8: [Curs Android] C07 - Liste (IPW 2011)

8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Observer – Exemplu (I)

Abonarea la Gmail

Page 9: [Curs Android] C07 - Liste (IPW 2011)

9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Observer – Exemplu (II)

Notificarea

Page 10: [Curs Android] C07 - Liste (IPW 2011)

10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

ListActivity• Activitate specializata pentru o

lista• Poate contine si alte componente• ID-ul listei:

– android:id=“@android:id/list”

• Metode speciale:– onListItemClick(…)– setListAdapter(…)

Page 11: [Curs Android] C07 - Liste (IPW 2011)

11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Adaptor

Page 12: [Curs Android] C07 - Liste (IPW 2011)

12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

ListView• Container vertical• Optimizat pentru miscare• Implicit, avem componente

identice pe fiecare rand• Rolul adaptorului:

– Genereaza aceste componente

• Evenimente:– setOnItemClickListener(…)– setOnItemLongClickListener(…)

Page 13: [Curs Android] C07 - Liste (IPW 2011)

13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Adaptor• Poate fi predefinit:

– ArrayAdapter

• Sau customizat de programator:– Prin implementarea ListAdapter– Extinderea BaseAdapter

Page 14: [Curs Android] C07 - Liste (IPW 2011)

14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Varianta statica cu ArrayAdapter (I)

Page 15: [Curs Android] C07 - Liste (IPW 2011)

15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Varianta statica cu ArrayAdapter (II)

Page 16: [Curs Android] C07 - Liste (IPW 2011)

16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Varianta dinamica cu ArrayAdapter (I)

Page 17: [Curs Android] C07 - Liste (IPW 2011)

17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Varianta dinamica cu ArrayAdapter (II)

Page 18: [Curs Android] C07 - Liste (IPW 2011)

18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Concluzii implementare cu ArrayAdapter

• ListView– Contine o lista– android:id=“@android:id/list”

• Elementele listei– android.R.layout.simple_list_item_1

• Static– Putem utiliza String[]

• Dinamic– Putem utiliza ArrayList<String>

Page 19: [Curs Android] C07 - Liste (IPW 2011)

19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Sa incercam ceva mai complex

Page 20: [Curs Android] C07 - Liste (IPW 2011)

20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Liste cu elemente complexe• Elementele sunt componente de tip container, ce

pot contine:– TextView– ImageView– …

• Adaptor custom-made– Prin implementarea ListAdapter– Extinderea BaseAapter

Page 21: [Curs Android] C07 - Liste (IPW 2011)

21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (I)• public View getView

(int position, View convertView, ViewGroup list);

• public int getCount ();

• public Object getItem(int position) ;

• public long getItemId(int position);

Page 22: [Curs Android] C07 - Liste (IPW 2011)

22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (II)

Page 23: [Curs Android] C07 - Liste (IPW 2011)

23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (III)

Page 24: [Curs Android] C07 - Liste (IPW 2011)

24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (IV)

Page 25: [Curs Android] C07 - Liste (IPW 2011)

25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (V)

Page 26: [Curs Android] C07 - Liste (IPW 2011)

26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extinderea BaseAdapter (VI)

Page 27: [Curs Android] C07 - Liste (IPW 2011)

27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Reciclare• Reutilizarea Obiectelor• Evitarea crearii de obiecte

– new is bad for memory!

• Utilizam– buffere

Page 28: [Curs Android] C07 - Liste (IPW 2011)

28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Optimizare (I)

Page 29: [Curs Android] C07 - Liste (IPW 2011)

29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Optimizare (II)

Page 30: [Curs Android] C07 - Liste (IPW 2011)

30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Optimizare (III)

Page 31: [Curs Android] C07 - Liste (IPW 2011)

31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Tag-uri (pentru View)• public void setTag(Object tag);• public Object getTag();

Page 32: [Curs Android] C07 - Liste (IPW 2011)

32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Eficient folosind Tag

Page 33: [Curs Android] C07 - Liste (IPW 2011)

33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Referinte• http://pdm.ipworkshop.ro• http://en.wikipedia.org/wiki/Model%E2%80%93vie

w%E2%80%93controller• http://developer.android.com/guide/tutorials/views

/hello-listview.html

Page 34: [Curs Android] C07 - Liste (IPW 2011)

34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Întrebări?