Creați-vă vizualizarea de listă personalizată, programarea pentru Android, java - chiar din primii pași

Recent, am fost nedumerit cu crearea unui personalizat ListView, astfel că, în loc de o linie în fiecare element al listei ar fi câteva linii: Ei bine, cum ar fi titlul și subtitlul. Am căutat pe Internet și am ajuns la concluzia că, din păcate, nu există un tutorial adecvat în limba rusă pe această temă. Nitsche teribil. Acum va fi. ). Cel puțin vorbitoare de limbă rusă și sper că este adecvată :).

Deci, în primul rând, voi încerca să descriu logica creării unui astfel de ListView, și apoi voi da un exemplu cu codul sursă.

Pentru început, avem nevoie de un adaptor pentru a afișa orice informație din ListView - un strat între datele dvs. și afișarea grafică în ListView. Dacă vrem o listă normală, atunci totul e minunat - folosim clasa StringAdapter și suntem fericiți. Vom transmite-o la orice șir de șir, apoi transferăm adaptorul nostru în ListView și obțineți ListView terminat completat cu elementele din șirul de șir. Cu toate acestea, totul devine mult mai complicat atunci când fiecare element ListView conține ceva mai mult decât o singură linie. În acest caz, va trebui să creați un fișier separat cu un aspect (layout) în care vor fi stocate conținutul fiecărui ListView. Deoarece am nevoie de o listă cu antet și subtitrare, am creat aici un astfel de fișier:

Creați-vă vizualizarea de listă personalizată, programarea pentru Android, java - chiar din primii pași

Aspectul marcajului

Avem două câmpuri de text în fișierul de marcare: primul item_headerText și al doilea item_subHeaderText.

Următorul pas este să creați o structură cu un antet și un subcapitol. Am facut-o in aceasta clasa mica:

Acum, să începem implementarea clasei adaptorului. De fapt, este clasa de adaptor care creează fiecare element din ListView, ceea ce înseamnă că sarcina noastră va fi aceea de a crea fiecare element. În plus, alte funcții sunt atribuite clasei de adaptor. Personal, am moștenit adaptorul meu din clasa abstractă BaseAdapter. Trebuie să implementăm mai multe metode. Ce am facut de fapt:

Acum, să vedem ce e ceea ce: MyAdapter () constructorul are doi parametri: prima - cadrul celui de al doilea șir de valori din care ne vom construi ListView noastre. Metodele getCount () și getItem () Cred că în explicație nu este nevoie. Cel mai interesant lucru se întâmplă în metoda getView (). Această metodă este apelată din ListView când folia încearcă să se umple cu adaptorul. Ca parametrii de aici vin numărul articolului I, care este în prezent încercarea de a adăuga un ListView, someView obiect gol - este doar ca vedere că vom completa și ViewGroup exemplu - care nu este altul decât el însuși umplut ListView.

În această metodă, primim mai întâi o instanță a clasei LayoutInflater - aceasta este clasa utilizată pentru a crea Vizualizarea obiectelor din descrierea lor în xml. Apoi, în transmisa someView, aruncăm obiectul View obținut din fișierul nostru de marcare. Și configurați parametrii - cum ar fi titlul și subtitrarea! Nimic complicat, noroc!

Ultimul element este, de fapt, clasa de activitate:

Și aici nu ar trebui să apară probleme. Formați lista de obiecte și aruncați-o în adaptorul creat anonim. Hooray, funcționează. Aici puteți descărca proiectul ListViewTutorial pentru Eclipse.

Metoda onItemClick a fost adăugată la cererea lui Dmitrii. Rețineți că Activarea noastră implementează interfața OnItemClickListenr. În consecință, metoda onItemClick este apelată când apare un clic pe unul din elementele listate. Când faceți clic pe, creați o notificare de tip pop-up Toast, în care afișăm antetul articolului din listă pe care la atins utilizatorul.

Dacă aveți întrebări sau dorințe - scrieți! Voi încerca să răspund!

Ți-a plăcut? A fost util? Distribuiți!

Bună ziua, am încă o întrebare:
Inițial, codul meu de activitate arată astfel:
clasa publică SpisokActivity extinde AppCompatActivity @Override
protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState);
setContentView (R.layout.activity_spisok);

ListView lv;
Datele din ArrayList = nou ArrayList ();

data.add (element nou ("apare", "a apărut", "a apărut", "a apărea"));
data.add (element nou ("fi", "a fost / a fost", "a fi", "a fi"));
data.add (post nou ("urs", "plictisitor", "născut / suportat", "naștere"));
data.add (element nou ("beat", "beat", "bătut"));
data.add (element nou ("deveni", "a devenit", "a devenit"));
lv = (ListView) this.findViewById (R.id.list);
lv.setAdapter (noul MyAdapter (acest lucru, date));
>
>
Codul funcționează, dar întrebarea a apărut odată cu dezactivarea presei, apoi am scris astfel:
clasa publică SpisokActivity se extinde și funcția android.app.ListActivity @Override
protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState);
setContentView (R.layout.activity_spisok);

ListView lv;
Datele din ArrayList = nou ArrayList ();

Articole similare