Tworzenie i obsługa wielu okien w systemie Android

27 kwietnia 2026 12:12

Każda nowoczesna aplikacja składa się z wielu ekranów – logowanie, lista wiadomości, ustawienia. W systemie Android jeden taki pełnoprawny ekran nazywamy Aktywnością (Activity). W tym wpisie nauczysz się, jak płynnie przechodzić między ekranami, przekazywać im informacje i poprawnie wracać do poprzedniego widoku.

Do podróżowania między Aktywnościami wykorzystamy mechanizm o nazwie Intent (Intencja). Wyobraź sobie, że Intent to koperta listowa. Zapisujesz na niej adres docelowy (jakie okno chcesz otworzyć), a do środka możesz włożyć dodatkowe informacje, z których drugie okno będzie mogło skorzystać.

Krok 1: Nadawanie listu - MainActivity.java

Zaczynamy od pierwszego ekranu. Mamy tu przycisk, którego kliknięcie ma przenieść użytkownika do nowej Aktywności i przekazać powitanie.

package com.twojanazwa.aplikacja;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // Podpinamy wygląd pierwszego okna

        Button btnDalej = findViewById(R.id.btnGoToSecondScreen);

        btnDalej.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1. Adresujemy kopertę: z MainActivity (tutaj) do SecondActivity
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                
                // 2. Wkładamy dane do koperty (tzw. Extras)
                // Używamy unikalnych kluczy (np. "IMIE_UZYTKOWNIKA"), by drugie okno wiedziało czego szukać
                intent.putExtra("IMIE_UZYTKOWNIKA", "Jan");
                intent.putExtra("WIEK_UZYTKOWNIKA", 25);
                
                // 3. Wysyłamy list i otwieramy nowe okno!
                startActivity(intent);
            }
        });
    }
}

Krok 2: Odbieranie listu – SecondActivity.java

Teraz piszemy kod dla naszego drugiego ekranu. Skoro właśnie został otwarty, jego pierwszym zadaniem będzie zajrzenie do Intencji i wyciągnięcie przysłanych danych.

package com.twojanazwa.aplikacja;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second); // Podpinamy wygląd drugiego okna

        // 1. Prosimy system o dostarczenie naszej koperty (Intencji)
        Intent intent = getIntent();

        // 2. Wyciągamy dane używając tych samych kluczy
        String imie = intent.getStringExtra("IMIE_UZYTKOWNIKA");
        
        // Zabezpieczenie: co jeśli ktoś zapomniał wysłać imienia?
        if (imie == null) {
            imie = "Nieznajomy";
        }
        
        // Przy liczbach musimy podać wartość domyślną (np. 0) na wypadek braku danych
        int wiek = intent.getIntExtra("WIEK_UZYTKOWNIKA", 0);

        // 3. Wyświetlamy pobrane dane na ekranie
        TextView textView = findViewById(R.id.textViewDane);
        textView.setText("Witaj " + imie + "! Twój wiek to: " + wiek);
    }
}

Krok 3: Rejestracja w "Dziekanacie" – AndroidManifest.xml

Uwaga na częsty błąd (ActivityNotFoundException)!
Każde nowe okno (Activity) w aplikacji przypomina nowego ucznia w szkole. Zanim uczeń będzie mógł wejść do klasy, musi zostać zapisany w głównym rejestrze. W Androidzie tym rejestrem jest plik konfiguracyjny AndroidManifest.xml.

Jeśli pominiesz ten krok, system odmówi otwarcia okna i aplikacja ulegnie awarii. Musisz poinformować system o istnieniu SecondActivity, dodając odpowiedni tag w sekcji <application>:

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.TwojaAplikacja">

    <activity android:name=".MainActivity" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".SecondActivity" />

</application>

Krok 4: Powrót do poprzedniego okna

W systemie Android okna zachowują się jak stos kartek. Kiedy otwierasz nowe okno, kładzie się ono na starym. Stare okno cierpliwie czeka pod spodem.

Aby wrócić do MainActivity, nigdy nie twórz nowego Intencji! Stworzyłoby to duplikat pierwszego ekranu na wierzchu. Zamiast tego, po prostu zamknij obecne okno (ściągnij górną kartkę ze stosu). Służy do tego metoda finish().

Button btnWroc = findViewById(R.id.przyciskWroc);

btnWroc.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Zamyka to okno (SecondActivity)
        // System automatycznie ukaże ekran pod spodem (MainActivity)
        finish(); 
    }
});

Wskazówka: Fizyczny przycisk "Wstecz" na telefonie użytkownika (lub gest systemowy) automatycznie wywołuje metodę finish() w tle.