Gestione delle sottoattività – Lezione 15 di Android

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:

  package it.datrevo.testactivity;

  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.

  package it.datrevo.testactivity;

  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 :

  <?xml version="1.0" encoding="utf-8"?>
  <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:

  <?xml version="1.0" encoding="utf-8"?>
  <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>

Test Android sottoattività

Test Android sottoattività

Indice Lezione PrecedenteLezione Successiva

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *