My blog

posts

How to handle click events in Android?

In android, exista mai multe modalitati de a manipula evenimentele survenite interactiunii userului cu interfata aplicatiei. Astazi insa, ne vom axa numai pe metodele de manipulare a clickurilor. 

Sa luam ca exemplu o aplicatie care nu contine altceva decat un buton care odata apasat va porni un fisier audio. Intai de toate, trebuie sa creem butonul in xml astfel: 
<Button
   android:id=”+id/button”
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text=”play”/>
Prima optiune pe care o putem utiliza e sa ne folosim de atributul onClick disponibil direct din fisierul xml. Acesta va face legatura dintre buton si o functie din activitatea in care se afla acesta in momentul in care va fi apasat.
// XML CODE
<Button
   android:id=”+id/button”
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text=”play”
   android:onClick="playSound"/>

// JAVA CODE
public void playSound(View view){
  // play the sound	
}

Odata apasat butonul, functia playSound va fi apleata iar codul din interiorul acesteia va fi executat. 

Cu siguranta te intrebi ce este cu parametrul View primit de catre functie. Ei bine, acesta reprezinta elementul de pe care a fost apelata functia. Este specificat tipul View, deoarece aceasta este clasa  parinte din care sunt extinse mai multe elemente din interfata vizuale, printre care si butoanele. 

Am vorbit mai mult despre aceasta abordare in articolul despre interfete. 

Pai bine, si probabil ca te intrebi care e a doua optiune? Cea de-a doua abordare este sa folosim un event listener. Si acum cel mai probabil ai ramas in ceata. Nu-ti face griji, explic.

Un event listener este un procedeu sau o functie in interiorul unui program care asteapta ca un event sa aiba loc. Un exemplu in acest fel sunt clickurile facute de user in aplicatie. Practic, developerul seteaza un program in spate care sa detecteze momentul in care userul face click pe un element din aplicatie pentru a realiza o operatie anume (deschide cosul de cumparaturi, suna numarul format, posteaza poza pe instagram etc.). Termenul de Event listener este specific limbajelor de programare Java si JavaScript, in celelalte limbaje fiind cunoscut ca Event handler.  

In Android, clasa View implementeaza mai multe interfete care faciliteaza manipularea evenimentelor, astfel avand si denumirea de event listeners. Fiecare interfata contine o functie care trebuie suprascrisa pentru a-ti putea executa codul propriu. Dar hai mai bine sa vedem asta direct in cod. 
// XML CODE
  <Button
   android:id=”+id/button”
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

// JAVA CODE
Button button = findViewById(R.id.button); 

button.setOnClickListener(new AdapterView.OnClickListener() {
   @Override
   public void onClick(View view) {
	 // play sound
   }
});
Dupa cum vezi, dupa ce am stocat referinta catre buton, in java script prin ID-ul dat in XML, am setat un onClickListener prin functia setOnClickListener. Aceasta din urma primeste ca parametru interfata OnClickListener unde am supra scris functia OnClik pentru a porni fisierul nostru mp3. 


Si probabil acum te intrebi : “De ce sa imi bat capul cu atat de mult cod scris in java cand prima varianta e mult mai usoara? “. Hai mai bine sa ne uitam la cateva avantaje si dezavantaje. 
 
In primul rand, folosind un eventlistener va fi mult mai usor pentru persoanele cu care vei lucra sa inteleaga cum functioneaza aplicatia. Avand in vedere ca in cea mai mare parte a timpului vei dezvolta cod in Java, iti va fi mult mai clar si mai usor sa vezi, folosind un listener, ce anume face un element din aplicatie. Astfel ca, in sase luni de acum incolo nu vei fi nevoit sa te plimbi ca bezmeticul prin ba prin fisierele xml, ba prin cele java ca aflii ce buton apeleaza o anumita functie. 

In al doilea rand, cu toate ca vei avea mai mult cod de scris (chiar daca IDE-ul te va ajuta mult cu autocompletul sau), codul din XML nu va fi dependent de cel din Java. Avand in vedere faptul ca odata setat atributul onClick vei fi obligat sa ai functia pe care o apeleaza in activitate. Prin urmare, utilizarea unui event listener va permite mutarea codului intr-o clasa separata, oferind codului un aspect mai aerisit. 

In opinia mea, folosirea atributului onClick pentru realizarea de task-uri complexe este una gresita. Personal, cred ca acesta ar trebui folosit atunci cand avem aplicatii simple, care nu necesita o mentenanta sporita pe termen lung. 

Concluzie

Utilizand un event listener vei putea intelegem ai bine logica aplicatiei chiar si peste un an de cand l-ai scris, iar viitorii colegi isi vor multumi pentru asta. Cu toate astea, atunci cand ai o aplicatie extrem de simpla, care nu necesita o mentenanta continua, nu este nimic gresit in a te folosi de atributul onClick din XML.

0 Comments

  • Be the first one who leaves a comment!

Add a comment