Nei capitoli precedenti abbiamo mostrato la struttura del nostro progetto e abbiamo preso un po’ di familiarità con il simulatore. Adesso ci occuperemo dell’analisi vera e propria del codice sorgente all’interno dei file che sono stati auotgenerati. Capire la struttura dell’applicazione, dal punto di vista del codice sorgente, è fondamentale per poter produrre, in maniera autonoma, altre applicazioni.
Prima di far ciò è opportuno fare una premessa: per chi è a digiuno del linguaggio di programmazione Java o semplicimente vuole riprenderne alcuni concetti si consiglia la lettura della guida a Java presente sulle pagine di questo sito.
Durante l’analisi del codice il lettore potrà approfodire i vari argomenti andando a leggere le reference disponibili sul sito degli sviluppatori Andorid raggiungibile alla seguente pagina http://developer.android.com/reference/packages.html.
Come possiamo vedere in alto a destra della pagina è presente un modulo di ricerca, lì è possibile immettere il nome di una classe o di un metodo per trovare la reference appropriata. Si consiglia vivamente al lettore di approfondire i vari argomenti in quanto in questa guida, per ovvie ragioni di spazio, non potremo scendere troppo in profondità per ogni argomento trattato.
Iniziamo a lavorare con il codice
Riprendiamo adesso il nostro progetto di esempio MyHelloWorld ed apriamo il file MainActivity.java. Il codice contenuto nel file è il seguente:
package com.example.myhelloworld;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Come prima cosa viene dichiarato il package di appartenenza (il nome è il medesimo di quello inserito all’atto di creazione del progetto) e poi vengono eseguiti due import di classi Java: la classe Activity e la classe Bundle. Quest’ultima, se instanziata, crea un oggetto di tipo bundle che altro non è che un’associazione tra un valore di una stringa ed un insieme di dati.
Continuando nell’analisi del codice vediamo che viene creata la nostra classe base che altro non è che un’activity. Vediamo che è possibile identificare la nostra classe come un’Activity in quanto, con il costrutto extends, ereditiamo la classe Activity con i suoi attributi e tutti i suoi metodi.
Definita la classe come un’activity è obbligatorio ridefinire il metodo onCreate in quanto è il metodo che permette l’avvio vero e proprio dell’activity. All’interno di questo metodo dobbiamo inserire tutto il codice riguardante la struttura della nostra activity.
Andiamo adesso a focalizzare la nostra attenzione nel codice sorgente appartenente al corpo del metodo onCreate. Come possiamo vedere, la prima istruzione è quella di invocare il metodo onCreate sulla superclasse grazie al costrutto super. Al metodo viene passato, come argomento, un oggetto di tipo Bundle ovvero l’oggetto savedInstanceState che contiene lo stato attuale dell’activity.
Come ultima istruzione troviamo l’invocazione del metodo setContentView che di fatto setta il layout della nostra activity. Ma quale layout verrà impostato? Semplicemente quello passato come argomento contenuto nell’attributo main all’interno della classe R. Questo attributo automaticamente richiamerà il file activity_main.xml contenuto nella cartella res/layout del nostro progetto.
Nel prossimo capitolo andremo ad esplorare il contenuto del file main.xml che definisce il layout della nostra activity.