In un’applicazione Android può esistere un’unica attività definita come main. Tutte le altre attività dell’applicazione che verranno registrate nell’AndroidManifest.xml non potranno essere marcate con l’intent-filter MAIN e LAUNCHER. Le attività secondarie, o sottoattività, possono essere avviate dal’attività principale utilizzando il metodo startActivity(); questo metodo accetta come argomento un oggetto di tipo android.content.Intent, ovvero la sottoattività che vogliamo avviare.
Analizziamo un esempio pratico: creiamo una nuova applicazione composta da un’attività principale (TestMainActivity) e da una sottoattività (TestSubActivity1). L’attività principale avrà un bottone che consente di avviare la sottoattività.
Per poter lanciare la sottoattività TestSubActivity1, dovremo scrivere nel listener del bottone startActivity(new Intent(this, TestSubActivity1.class));. Cliccando sul bottone la sottoattività verrà lanciata, occuperà lo schermo al posto di quella principale e verrà posta in cima allo stack. L’attività precedente sarà ibernata (vedi ciclo di vita di un’attività) e sospesa in attesa di essere riutilizzata. Quanto appena detto si trova nel codice seguente:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle; import android.view.View;
import android.widget.Button;
public class TestMainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Bottone per lanciare TestSubActivity1
Button button = new Button(this);
button.setText("Avvia TestSubActivity1");
// Impostiamo l'azione da effettuare quando il bottone viene cliccato
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
startTestSubActivity1();
}
});
setContentView(button);
}
private void startTestSubActivity1() {
Intent intent = new Intent(this, TestSubActivity1.class);
startActivity(intent);
}
}
In TestSubActivity1 avremo un pulsante che ci permetterà di chiudere la sottoattività (con il metodo finish()) e tornare all’attività principale.
import android.app.Activity; import android.os.Bundle;
import android.view.View;import android.widget.Button;
public class TestSubActivity1 extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// Impostiamo il bottone per terminare la sottoattività
Button button = new Button(this);
button.setText("Termina TestSubActivity1");
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {finish();}});
setContentView(button);
}
}
Occorre registrare queste nuove attività nel manifesto dell’applicazione :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="it.datrevo.testactivity"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".TestMainActivity"
android:label="@string/main_activity_label">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TestSubActivity1"
android:label="@string/sub1_activity_label"></activity>
</application>
</manifest>
Infine, nel file res/values/strings.xml dovremo inserire i riferimenti alle stringhe utilizzate nell’AndroidManifest.xml:
<resources>
<string name="app_name">Test Main Activity</string>
<string name="main_activity_label">Main Activity</string>
<string name="sub1_activity_label">Test Sub Activity 1</string>
</resources>


Indice | Lezione Precedente – Lezione Successiva |