Un’applicazione Android può contenere zero o più activity. Quando sono presenti più activity all’interno di un’applicazione solitamente è necessario fornire una funzionalità di navigazione tra di esse e per fare questo in Android si utilizzano i cosiddetti Intent.
Il concetto di Intent è un po’ astratto e per comprendere la sua importanza, come spesso accade, la cosa migliore è quella di provarne il funzionamento con un esempio pratico in cui aggiungiamo una seconda activity ad un progetto e poi navighiamo tra questa e quella principale.
Avviamo dunque Eclipse e creiamo un nuovo progetto denominato "TestIntent", denominando l’activity predefinita come "PrimaActivity"
Nella finestra Package Explorer clicchiamo con il tasto destro del mouse sulla cartella "src" e selezioniamo l’opzione "New – Class"
Denominiamo la classe in "SecondaActivity" e clicchiamo su "Finish", il risultato sarà il seguente
Apriamo il file AndroidManifest.xml e modifichiamolo inserendo i riferimenti a questa seconda activity
Andiamo nella cartella reslayout e creiamo al suo interno una copia del file xml in essa contenuto, denominando il nuovo file "activity_seconda.xml"
Visualizziamo il codice xml di questa seconda activity e modifichiamo solo il testo associato alla TextView predefinita
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Seconda activity" />
Modifichiamo il file SecondaActivity.java che abbiamo creato in precedenza nel modo seguente
Adesso aggiungiamo nel file activity_prima.xml il codice relativo ad un controllo Button da visualizzare appunto nella prima activity e che ci servirà per passare alla seconda
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Visualizza la seconda activity"
android:onClick="onClick"/>
Questo codice graficamente corrisponde al pulsante presente nella seguente schermata
A questo punto nella classe PrimaActivity.java dobbiamo solo implementare il metodo onClick in modo che alla pressione del Button verrà visualizzata la seconda activity
import android.content.Intent;
import android.view.View;
...
public void onClick(View view) {
startActivity(new Intent("android.intent.action.SecondaActivity"));
}
...
Lanciamo adesso l’applicazione. Come possiamo vedere all’avvio verrà visualizzata la prima activity
Cliccando sul pulsante verrà visualizzata la seconda activity
Abbiamo dunque imparato che un’activity è costituita da una file xml relativo all’interfaccia e da una classe che serve a definirne il comportamento. Quindi quando vogliamo aggiungere una nuova activity ad un nostro progetto dobbiamo creare queste due componenti e dichiarare nel file AndroidManifest.xml la nuova activity in modo simile al seguente
<activity
android:name="com.example.testintent.SecondaActivity"
android:label="Seconda Activity" >
<intent-filter>
<action android:name="android.intent.action.SecondaActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
In questo codice il nome dell’activity è "com.example.testintent.SecondaActivity", la sua etichetta "Seconda Activity".
Molto importante è anche il nome utilizzabile degli intent per richiamare l’activity (android.intent.action.SecondaActivity), perchè in pratica se altre activity vogliono richiamare questa activity devono utilizzare questo nome (tag action). Per quanto riguarda il valore del tag category (android.intent.category.DEFAULT) è necessario impostarlo per far sì che l’activity possa essere richiamata da un’altra activity, come abbiamo visto nel nostro esempio.
In Android le activity possono essere richiamate da altre applicazioni in esecuzione sul dispositivo utilizzando proprio i valori della sezione intent-filter. Questo è uno dei concetti più importanti in Android perché consente facilmente ad un’applicazione di richiamarne un’altra.