Android Meet

Android: Meet - ListaView

Android Meet

Situat în folderul Composite.

ListView este mai dificil de utilizat decât TextView și alte elemente simple. Lucrul cu lista este alcătuit din două părți. Mai întâi adăugăm ListView la formular, apoi îl umplem cu elementele din listă.







Să luăm în considerare, pentru început, cel mai simplu exemplu. Plasați widgetul ListView pe formular. Veți vedea că lista va conține mai multe elemente de element și de element secundar.

Android Meet

Cu toate acestea, dacă ne uităm la codul XML, atunci nu vom vedea nimic.

Să mergem la clasa de activitate și să scriem următorul cod în metoda onCreate ():

Asta e tot. Să ne ocupăm de cod.

Adaptoare - completarea listei cu conținut

Elementul ListView cere ca conținutul să fie completat. Sursa de umplere poate fi diferite surse: matrice, baze de date. Pentru a asocia datele cu o listă, se folosește așa-numitul adaptor.

Adaptorul este de obicei creat folosind noul construct ArrayAdapter (Context context, int textViewResourceId, String [] obiecte).

  • context - context actual
  • textViewResourceId - identificator de resurse cu marcare pentru fiecare rând. Puteți utiliza marcajul de sistem cu ID-ul android.R.layout.simple_list_item_1 sau puteți crea propriul markup
  • obiecte - matrice de șiruri de caractere

Metoda setAdapter (ListAdapter) leagă lista adaptată la adaptor.

Trecem la codul java. Mai întâi, primim o instanță a ListView în metoda onCreate (). Apoi, definim o matrice de tip String. În cele din urmă, folosim adaptorul de date pentru a cartografia datele în șablonul de marcare. Alegerea adaptorului depinde de tipul de date utilizat. În cazul nostru, am folosit clasa ArrayAdapter.

retragere

Dacă luați linii din resurse, codul va fi:

Și va fi chiar mai bine dacă utilizați tipul de resursă special conceput pentru acest caz . În fișierul res / values ​​/ strings.xml, adăugați următoarele:

Dacă executați proiectul în emulator, veți vedea un exemplu de lucru al unei liste de defilare. Cu toate acestea, lista creată nu reacționează la apăsarea încă. Dar când faceți clic, elementul selectat este evidențiat cu un dreptunghi colorat (versiunea Android 2.3 era portocalie și Android 4.0 - albastru).

Android Meet

Marcare proprie

În exemplul respectiv, folosim marcajul de sistem finit android.R.layout.simple_list_item_1. în care sunt setate culorile, fundalul, înălțimea punctelor și alți parametri. Dar nu există obstacole în crearea propriului dvs. markup pentru aplicația dvs.

Vedem că marcajul utilizează TextView cu un set de atribute.

Să creați propriul dvs. șablon pentru un element de listă separat. Pentru a face acest lucru, în folderul res / layout / creați un nou fișier list_item.xml:

Puteți configura toate atributele pentru TextView, cu excepția proprietății Text. deoarece textul va fi automat umplut cu elementul ListView programabil. Ei bine, și apoi pur și simplu schimbați codul din codul dvs. în propria marcare:

Completarea dinamică a listei

Să luăm în considerare un exemplu de umplere dinamică a listei, atunci când lista este inițial goală și utilizatorul însuși adaugă noi elemente. Plasați pe ecran o casetă de text în care utilizatorul va introduce numele cunoscute de pisici. Când utilizatorul apasă tasta Enter de pe tastatură, numele pisicii introduse va apărea în listă.

Android Meet

Avem un cadru pentru chat, atunci când utilizatorul introduce textul și intră pe listă. Apoi, trebuie să obțineți textul de la un alt utilizator și să adăugați, de asemenea, la listă. Apropo, cuvântul de chat din franceză înseamnă "pisică". Dar aceasta este o poveste complet diferită.







ListView Listener

Trebuie să răspundem la anumite evenimente generate de un element ListView, în special, suntem interesați de un eveniment care apare atunci când un utilizator face clic pe unul dintre elementele listate.

Această metodă ne va ajuta elementul ListView setOnItemClickListener și metoda OnItemClick (clasa AdapterView.OnItemClickListener).

Acum când faceți clic pe orice element al listei, primim un mesaj pop-up conținând textul elementului selectat.

Firește, nu putem doar să afișăm mesaje, ci și să lansăm noi activități etc.

Metoda onItemClick () a trecut toate informațiile necesare pentru a determina elementul făcut clic pe listă. În exemplul de mai sus, folosim un mod simplu - pentru a da elementul selectat la obiect TextView, deoarece este cunoscut faptul că toate elementele sunt elemente TextView (instanceof pot folosi operatorul de teste suplimentare). Extragem textul din elementul selectat și îl comparăm cu linia proprie.

De asemenea, puteți să verificați atributul id pentru a determina dacă se face clic pe un element din listă.

ListView nu răspunde la clicuri

În unele cazuri, apăsarea elementelor din meniu nu funcționează. Iată câteva motive posibile.

Un element de listă conține un CheckBox, care are și clic pe ascultător. Încercați să eliminați focalizarea din acesta:

Încercați să mutați aplicația OnItemClickListener înainte de a instala Adaptorul. Uneori ajută :-)

Un element din listă conține o imagineButton. Setați focalizarea pe fals:

Elementul din listă conține TextView. Dacă utilizați atributul android: inputType = "textMultiLine". apoi înlocuiți-l cu Android: minLines / android: maxLines.

Personalizați aspectul ListView

ListView are mai multe atribute utile care fac lista mai atractivă. De exemplu, are un atribut divizor. care este responsabilă pentru apariția separatorului, precum și pentru divizorul Heights. responsabil de înălțimea separatorului. Putem seta o culoare sau chiar o imagine pentru separator. De exemplu, să creăm o resursă de culoare cu o culoare roșie pentru separator, precum și o resursă pentru înălțimea ei:

Apoi, atribuiți resursa creată atributului divizor. și, de asemenea, setați înălțimea sa în atributul dividerHeight al ListView:

Android Meet

Dacă nu vă place delimitatorul standard, puteți desena o linie ondulată, salvați-o într-un fișier PNG și utilizați-o ca o resursă trasabilă. Fă-o singur.

Puteți lucra cu aceste atribute programabil:

Rețineți că delimitatorul nu apare în mod implicit, înainte de primul și ultimul element din listă. Dacă doriți să modificați aceste setări, utilizați proprietățile separatoare de subsol activate (footerDividersEnabled atribut), și separatoare de antet activată (atribut headerDividersEnabled):

Selector personalizat

Am văzut deja că, în mod prestabilit, elementul listei selectate este evidențiat utilizând o bară de culoare. Acest selector poate fi de asemenea configurat prin atributul listSelector. Creați o textură pentru selector și legați-o prin resursă. Iată un eșantion de halo texturat de culoare galbenă pentru un selector preluat dintr-o carte Android în 24 de ore. Programarea aplicațiilor pentru sistemul de operare Google.

Android Meet

Dacă trebuie să evidențiați imediat elementul dorit din listă atunci când executați programul, utilizați o grămadă de două metode:

Mai multe opțiuni

ListView vă permite să selectați nu numai un element, ci mai multe. În acest caz, trebuie să setați proprietatea Mode Choice (Alegerea modului) la multiplyChoice. care corespunde atributului android: choiceMode = "multipleChoice".

De asemenea, setările multiple pot fi programate utilizând metoda setChoiceMode (ListView.CHOICE_MODE_MULTIPLE).

Acum, dacă creați o serie de rânduri, de exemplu, o listă de produse pentru micul dejun pisică, obținem următorul rezultat.

Android Meet

Rămâne doar să obțineți în mod programatic elementele listate selectate de utilizator. Aici este lista mea de produse pe care vreau să le ofer o pisică. Sper că îi place alegerea mea. Elementele selectate vor fi plasate în TextView:

Android Meet

Dacă doriți să obțineți o listă separată a elementelor din lista selectată și neselectată, puteți scrie următoarele:

Variabila verificată va conține o listă de elemente selectate, iar variabila neschimbată - o listă cu elementele neselectate.

Trebuie remarcat faptul că exemplele au folosit vechea metodă getCheckedItemPositions (). disponibil de la Android 1. Android 2.2 are o nouă metodă, getCheckedItemIds (). Rețineți că prin noua metodă puteți obține o serie de elemente selectate, deși în cele mai multe cazuri acest lucru este suficient. Dar această metodă necesită problemele sale și în acest exemplu nu am câștigat-o.

Buton de sub listă

Dacă doriți să plasați un buton sub lista care nu depinde de numărul de elemente din ListView, utilizați greutatea (layout_weight).

Derulare ușoară în partea de sus a listei sau în orice poziție

Lista are o metodă specială numită smoothScrollToPosition (). permițându-vă să derulați fără probleme până la locația dorită. Este suficient ca metoda să specifice numărul de poziție pentru derulare:

Configurați derularea

ListView are atribute pentru a seta aspectul derulării

ListActivity

Dacă aveți nevoie de un formular constând doar dintr-o listă, atunci este mai ușor să folosiți clasa de sistem ListActivity în locul activității standard. Aceasta este abordarea descrisă în documentația pentru ListView. Un exemplu de lucrare este descris în articolul ListActivity - creați o listă derulantă.

Lectură suplimentară







Articole similare

Trimiteți-le prietenilor: