NaujienosApžvalgosNuomonėsIT RenginiaiPamokosPatarimaiSmulkmėHumorasTapk autoriumi

Android pamokos: ListView

Kategorija: PAMOKOS    Autorius: Gediminas Ubartas    Paskelbta: 2011-08-05 11:00
Pasidalinti per Twitter

“ListView” naudojimas turbūt pats patogiausias būdas atvaizduoti didelius kiekius duomenų. Šioje ketvirtojoje pamokoje jūs išmoksite kaip naudojant “ListView” galima peržiūrėti įvairiausius FWD>>  straipsnius.

Sukuriame Android programą

Prieš pradedant darbą su mygtukais, mums reikia turėti paruoštą darbui Android programą. Tai galime padaryti, atlikę veiksmus, aprašytus pirmojoje pamokoje arba parsisiuntę jau paruoštą tuščios Android programos kodą.

Sukuriame objektą Straipsnis

Sukuriame objektą, kurio pagalba saugosime straipsnio pavadinimą ir nuorodą į jį:

public class Straipsnis {
	private String pavadinimas;
	private String adresas;

	public Straipsnis(String pavadinimas, String adresas) {
		super();
		this.pavadinimas = pavadinimas;
		this.adresas = adresas;
	}

	public String getPavadinimas() {
		return pavadinimas;
	}

	public void setPavadinimas(String pavadinimas) {
		this.pavadinimas = pavadinimas;
	}

	public String getAdresas() {
		return adresas;
	}

	public void setAdresas(String adresas) {
		this.adresas = adresas;
	}

}

Sukuriame straipsnių sąrašo ekrano vaizdą

Programos kataloge “res/layout/” sukuriame bylą “saraso_elementas.xml”. Šios bylos pagalba aprašome kaip turi atrodyti mūsų sąrašo elementas:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>

Taip pat mums reikia paredaguoti pagrindinės “Activity” klasės išvaizdos bylą “main.xml”. Į šią bylą įdedame žymą <ListView/> žyminčią mūsų sąrašo vietą.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:orientation="vertical">
	<ListView android:id="@android:id/list" android:layout_width="fill_parent"
		android:layout_height="wrap_content" />
	<TextView android:id="@+id/android:empty"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:text="Tuščia" />
</LinearLayout>

Atvaizduojame straipsnių sąrašą

Pirmiausiai sukuriame metodą, kuris grąžins sąrašą su “Straipsnis” objektais.
Pradiniame ekrane mes rodysime tik straipsnių pavadinimus, todėl mums reikia metodo, grąžinančio pavadinimų sąrašą:

private List<String> getStraipsniuPavadinimai() {
	List<String> pavadinimai = new ArrayList<String>();
	for (Iterator<Straipsnis> it = straipsniai.iterator(); it.hasNext();) {
		Straipsnis straipsnis = it.next();
		pavadinimai.add(straipsnis.getPavadinimas());
         }
	return pavadinimai;
}

Turėdami šiuos du metodus, galime redaguoti mūsų “Activity”. Pirmiausia mūsų klasė paveldi “Activity” klasę (extends Activity). Norėdami atlikti veiksmus su sąrašų objektais, mūsų “Activity” klasė turi paveldėti “ListActivity” (extends ListActivity).

Prieš išmėginant mūsų programą, mums reikia atvaizduoti pavadinimų sąrašą. Tai padarysime į metodą onCreate(Bundle savedInstanceState) įterpę eilutę:

setListAdapter(new ArrayAdapter<String>(this,R.layout.saraso_elementas, getStraipsniuPavadinimai()));

“ArrayAdapter” klasė yra atsakinga už elementų atvaizdavimą nurodytoje <ListView/> žymoje. Norint atvaizduoti elementus, mums reikia pateikti šiuos parametrus:

  • Kontekstas – mūsų ateikiamu atveju nurodome, kad naudosime dabartinį
  • Sąrašo elemento išvaizda – pavyzdyje nurodome, kad naudosime tai, kas aprašyta “saraso_elementas.xml”
  • Elementų sąrašas – pavyzdyje pateikiame sąrašą straipsnių pavadinimų.

Galime peržiūrėti mūsų programą:

Aprašome veiksmus, kai paspaustas sąrašo elementas

Norint atvaizduoti tinklalapį, naudojant straipsnio adresą, mums reikia sukurti nauja “Activity”. Ją pavadinkime “ViewActivity”.

public class ViewActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.view_activity_gui);
                //Paimame duomenis
		Intent launchingIntent = getIntent();
		String content = launchingIntent.getData().toString();

		WebView viewer = (WebView) findViewById(R.id.webView);
		viewer.loadUrl(content);
	}
}

Neužmirškime pakoreguoti ir “AndroidManifes.xml” bylos, kurioje nurodome naujai sukurtą “Activity”:

<activity android:name=".ViewActivity" android:label="@string/app_name">

Toje pačioje byloje pridedame žymą, kuri leis mūsų programai naudotis internetu:

 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

Taip pat reikia sukurti išvaizdos bylą (layout). Ją pavadinsime “view_activity_gui.xml”. Šioje byloje naudojame <WebView> žymą, kurios pagalba galime atvaizduoti internetinius puslapius.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<WebView android:id="@+id/webView" android:layout_width="fill_parent"
		android:layout_height="fill_parent" />
</LinearLayout>

Pagrindinėje programoje “Activity”, aprašome kaip elgtis, paspaudus ant sąrašo elemento:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
	super.onListItemClick(l, v, position, id);

	Intent viewActivityIntent = new Intent(this, ViewActivity.class);
	viewActivityIntent.setData(Uri.parse(straipsniai.get(position).getAdresas()));
	startActivity(viewActivityIntent);
}

Kaip rašiau antrojoje pamokoje, Android programose viena “Activity” gali iškviesti kitą. Visa tai yra padaroma naudojant Intent. Metode “onListItemClick” sukuriame naują “Intent”, nurodydami “ViewActivity” klasę. Metodo parametras “position” nurodo, kuris sąrašo elementas buvo pasirinktas. Naudodami šį parametrą, surandame paspaustą pavadinimą ir gauname jo adresą. Gautą adresą pateikiame mūsų sukurtam “Intent” ir jį aktyvuojame.

Štai taip atrodo mūsų sukurta programa, kai buvo pasirinktas vienas sąrašo elementas:

Sukurtąją programą rasite užsukę į http://code.google.com/p/empty-android-app/

Pasidalinti per Twitter
 
Straipsnio autorius:
Gediminas Ubartas Gediminas Ubartas
http://www.gedzis.net  ||  @Gedzis
Jaunas programuotojas kilęs iš Telšių, o dabar gyvenantis ir dirbantis Vilniuje. Besidomintis programavimu, Android OS. Dabar studijuoja Verslo informatikos specialybę, Mykolo Romerio Universitete. Laisvalaikį dažniausiai praleidžia krepšinio aikštelėje, būdamas su draugais arba tiesiog kurdamas įvairiausius projektus.
 
Rekomenduojame, jei patiko šis straipsnis:
Panašūs įrašai Kiti autoriaus įrašai Kiti kategorijos įrašai

Visi komentarai (19)
Mantas:
2011-08-05 12:10
Sveiki,

Labai būtų įdomu paskaityti kaip pasidaryti programėlę kuri transliutų net radiją. Visaip bandau ir man niekaip nesigauna.
Reikia kad .pls failus grotu.

Ačiū.
Mantas

    Gediminas Ubartas:
    2011-08-05 12:13
    Gediminas Ubartas Tai čia reikia jau sudėtingesnis etapas :) Gal vėliau ir bus galima kažką panašaus pamėgint padaryti ir parodyti kitiems :)

Petras:
2011-08-05 12:31
O kažką mandresnio iš ListView panaudojimų parodysi? su nestandartiniais elementais ir daugiau duomenų, optimizacijom, etc.

    Gediminas Ubartas:
    2011-08-05 12:34
    Gediminas Ubartas Taip :) Dabar tik paprasti pavyzdžiai. Po to padarysiu programėlę, kurioje sąrašo elementas bus stilizuotas ir panašiai.

    Povilas Korop:
    2011-08-05 12:34
    Povilas Korop Šiek tiek užstosiu Gediminą. FWD publikuojami straipsniai yra daugiau kaip įžanga ir bendra informacija apie tai, kaip funkcijos veikia. Jeigu kalbėti apie "mandresnius" panaudojimus, tai tada jau galima labai išsiplėsti ir galbūt knygą išleisti. Nors hm, Gediminai, gal čia visai gera idėja? :)

      Gediminas Ubartas:
      2011-08-05 12:38
      Gediminas Ubartas Povilai, pirma reikia viską mokėti, kad būtų galim knygą išleisti :) Aš jau esu suplanavęs keletą programėlių, kurios bus su sudėtingesnėmis konstrukcijomis. Pavyzdžiui, kaip sukurti ekraną, kuris atrodytu - http://androidapps.lt/wp-content/uploads/2011/03/Valiutu-Kursai-1.jpg.

        Petras:
        2011-08-05 12:41
        Va apie tokius pavyzdžius ir šneku! :)

          Gediminas Ubartas:
          2011-08-05 12:44
          Gediminas Ubartas Tai galėsiu pasidalint savo patirtimi kuriant tokius sąrašus (Pvz, mažo žaidime "Pakaruoklis" naudojamas daug paprastesnis - https://ssl.gstatic.com/android/market/net.gedzis/ss-480-2-17).
          Beje, labai malonu girdėti atsiliepimus ir pasiūlymus :)

    Petras:
    2011-08-05 12:40
    Tiesą sakant pamokas struktūrizuot kaip knygą būtų itin veiksminga :) Galbūt wiki pagrindu? Arba jeigu apie normalią knygą, tuomet turit puikią galimybę tapti pirmi Android knygos autoriai Lietuvoje.

      Gediminas Ubartas:
      2011-08-05 12:45
      Gediminas Ubartas Galbūt ir gera idėja viską struktūrizuoti. Manau apie tai bus galima pagalvoti, kai bus daugiau įrašų :)

Rimantas:
2011-08-05 14:43
Būkit žmonės, naudokit angliškus vardus kintamiesiems ir funkcijoms. Niekada nežinia, kada ir kas turės tvarkyti jūsų kodą. Taip jau susiklostė, kad programavimo kalbos remiasi angliškais raktažodžiais, vertėtų stilių ir išlaikyti.
Ir bet kokiu atveju, norint būti bent pusėtinu programuotojų be anglų kalbos neišsiversi.

    Gediminas Ubartas:
    2011-08-05 14:46
    Gediminas Ubartas Lietuviški kintamieji naudoti tam, kad skaitytojas geriau suprastų. Aš tikrai naudočiau angliškus kintamuosius, tačiau skaitytojams gali kilti neaiškumų

      Liudas Sodonis:
      2011-08-05 15:52
      Liudas Sodonis Labai diskutuotinas klausimas, ar geriau rašyti lietuviškai, kad skaitytojas suprastų.
      Jei jis jau bando programuoti 'ant' Android'o tai angliškai jau turi suprasti kažkiek. Kitaip nesugebės susidėti SDK, susikonfigūruoti visų toolsų.
      Beto, getStraipsnis() getPavadinimas() ok, labai aišku ir angliškai. O kiti keywordai kurie nesiverčia, tarkim loudURL ar super.onListItemClick(l, v, position, id); Jei nesupras ką jie daro, tuomet nelabai jis sugebės sukurti ką nors savo, o ne aklai kopijuoti kitų kodą.

    arturhtml:
    2011-08-05 16:14
    Jap, man irgi užkliuvo lietuviški pavadinimai :}}

Gediminas Ubartas:
2011-08-05 16:16
Gediminas Ubartas Na pavadinimus galima ir padaryt Angiškus :) Kitam įraše taip ir padarysiu :)

Petras:
2011-08-05 17:48
Gediminai, per daug neimk į galvą, visam pasaulyje įprasta, kad Android vartotojai yra viskuo nepatenkinti :D

Eduardas:
2012-01-13 23:13
Tikrai nemanau, kad reikia naudoti angliškus pavadinimus kintamiesiems ir funkcijomos. Jei norit angliškai eikit į *.com ar *.org ten manualų ir straipsnių daug.
Ačiū Gediminai, tikrai įdomu ir malonu gauti tokia informaciją lietuviškai. Taip toliau...

Petras:
2012-01-13 23:29
O rimtesnėms pamokoms atsirastų auditorija kas skaitytų? Gal vertėtų ką padaryt vardan to ;] Ta prasme aš visą info randu angliškai ir man žymiai patogiau, tai nesuprantu tų kurie tą skaito lietuviškai, bet visgi įdomu ar daug tokių yra. Gal kas iš adminų galėtų pasidalint su kokiu analytics reportu ar panašiai, kad sužinot kokie žmonių srautai ateina skaityt android pamokas čia? ;]

Parašykite komentarą:

Jūsų vardas (privalomas): Jūsų el.paštas (neskelbsime): Jūsų tinklalapis (neprivalomas):
Komentaras:

Hey.lt - Nemokamas lankytojų skaitliukas