2013/11/26

Zerrenda sinpleak - Listview widget-a

Androiden zerrenda bat erakutsi nahi bada ListView izeneko widget bat erabili beharko da. Hala eta guztiz ere widget horrekin ez da nahikoa izango zerrenda bat osatzeko, honako elementu hauek ere programatu beharko dira:
  • Array-a: zerrendan agertu behar duten datuen edukiontzia izango da. String (testuak), int (zenbakiak),...motatakoa izan daiteke.
  • ListAdapter-a: datuak listview-ari egokitzeko erabiltzen den elementu edo objektua da.
  • Listview-a: interfaze grafikoan, hau da, xml fitxategian kokatu behar dugun widget edo objektu grafikoa da. Zerrendak GUI-an izango duen itxura definituko du (zabalera, altuera, background-a,...).
Azter dezagun adibide batekin zerrenda sinple baten erabilera. Jarraian azalduko den kodearekin I. Ilustrazioan ikus daitekeen app-a lortuko da, bertan zerrendako elementu bakoitzean klikatzen denean, posizio horretako edukia edota testua bidaliko da pantailara Toast baten bitartez.

I. Ilustrazioa: Zerrenda sinple baten App-a


App-aren interfazea honako kodeak definituko du soilik:

 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/android:list"
           android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

Garrantzitsua da azpimarratzea ListView objektu bat erabiltzen denean bere id-a defektuz kodean agertzen den moduan uztea dela, hau da, android:id="@id/android:list" bezala. Modu honetan Listview batek dauzkan funtzionalitate guztiak aprobetxatuko ditugu; ostera errore bat emango du.

App-aren logikari dagokionez kode hau erabiliko da:

 package com.example.zerrendasinplea;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class MainActivity extends ListActivity {

 
 private String[] datuak = new String[] {"ELEKTRONIKA","INFORMATIKA","ELEKTRIZITATEA"};
 
 private ListView zerrenda = null;
 private ListAdapter arrayadapterra = null;
 
 @Override
    public void onCreate(Bundle savedInstanceState) 
 {                                           
      
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);
                        
        zerrenda = (ListView)findViewById(android.R.id.list);
        
        
        arrayadapterra = new ArrayAdapter(this,android.R.layout.simple_list_item_1,datuak);
        
        
        zerrenda.setAdapter(arrayadapterra);
        
 }
 
  protected void onListItemClick (ListView l, View v, int position, long id) 
  {     
   if(position==0)
   {
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   }
   
   if (position==1)
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   
   if (position==2)
   {
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   }
   
  }
 
}

Lehenengo eta behin ohartu MainActivity ez dela dagoeneko Activity-tik zabaltzen, baizik eta ListActivity-tik. Modu honetan lista edo zerrenda batekin erabil ditzakegun metodo eta funtzio ezberdinak eskuragarri izango ditugu, adibidez aurrerago erabiliko dugun onListItemClick.

onCreate-n sartu baino lehen aurretik aipatutako 3 elementuak (array-a, ListAdapter-a eta Listview-a) izendatu eta deklaratzen dira.
 

 private String[] datuak = new String[] {"ELEKTRONIKA","INFORMATIKA","ELEKTRIZITATEA"}; 
 private ListView zerrenda = null;
 private ListAdapter arrayadapterra = null;
 
Ondoren eta onCreate-ren barnean, behin interfaze grafikoa setContentView-ren bitartez bistaratu eta gero, Listview-a erreferentziatzen da, ListAdapter-a prestatzen da datuak eta datu horiek erakusteko erabiliko duen xml plantilla atxikituz (kasu honetan xml plantilla androidek defektuz ekartzen duen simple_list_item_1 da, soilik TextView bat du bere barnean) eta azkenik Listadapter-a Listview-ari ezartzen zaio.
 

 zerrenda = (ListView)findViewById(android.R.id.list);
        arrayadapterra = new ArrayAdapter(this,android.R.layout.simple_list_item_1,datuak);
        zerrenda.setAdapter(arrayadapterra);
 
Honekin nahikoa litzateke zerrenda erabiltzaileari erakusteko. Orain gelditzen dena zera da, erabiltzaileak zerrendaren gainean klik egiten duenean App-eak erantzun bat ematea.

Programatzen ari garen activity-a ListActivity-tik zabaldu denez,  onListItemClick metodoa erabil dezakegu helburu horretarako. Erabiltzaileak zerrendan klik egiten duen bakoitzean metodo honi deituko zaio. Metodo hau aukeratutako listako elementuaren posizioa antzemateko gai da besteak beste, kasu honetan position aldagaian gordeko da posizioaren int zenbakia (lehenengo posizioa 0 posizioa da, bigarrena 1 eta horrela hurrenez hurren azkeneraino!). Hori kontuan hartuz if batzuk erabiliz Toast batzuk erabiliko dira datuen array-aren bidez (array-en lehenengo posizioa ere 0 izaten da!) aukeratutako zerrendako posizioko testua erakusteko.
 

 protected void onListItemClick (ListView l, View v, int position, long id) 
  {     
   if(position==0)
   {
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   }
   
   if (position==1)//enlazar una web
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   
   if (position==2)//enlazar con una llamada-dar permisos en manifest de ACTION_CALL
   {
    Toast.makeText(this, datuak[position], Toast.LENGTH_SHORT).show();
   }
   
  }