92
Rozdział 3.
Ekstra, ekstra
Metoda putExtra() zapisuje w intencji
dodatkowe informacje
Wiesz już, że nową intencję można utworzyć w następujący sposób:
Intent intent = new Intent(this, KlasaDocelowa.class);
Jednak do takiej intencji można dodać dodatkowe informacje, które
następnie będzie można odczytać w aktywności docelowej i odpowiednio
na nie zareagować. Do zapisywania takich dodatkowych informacji służy
metoda
putExtra()
:
intent.putExtra(”message”, value);
gdzie
message
jest łańcuchem znaków określającym nazwę przekazywanej
wartości, a
value
jest samą wartością. Metoda
putExtra()
jest przeciążona,
dzięki czemu można jej używać do przekazywania wartości wielu różnych typów.
Na przykład mogą to być wartości typów prostych, takich jak
boolean
lub
int
,
tablice typów prostych bądź łańcuchy znaków —
String
. Metodę
putExtra()
można wywoływać wielokrotnie, aby zapisać w intencji więcej danych. W takich
sytuacjach należy jednak pamiętać, by każda wartość miała unikalną nazwę.
Jak pobrać dodatkowe informacje z intencji?
To jednak jeszcze nie koniec historii. Kiedy system nakaże uruchomienie
aktywności
ReceiveMessageActivity
, musi ona dysponować jakąś
możliwością pobrania dodatkowych informacji, które aktywność
CreateMessageActivity
przesłała do niej w intencji.
Istnieje kilka przydatnych metod, których można użyć do tego celu.
Pierwszą z nich jest:
getIntent();
Metoda
getIntent()
zwraca intencję, która została użyta do uruchomienia
aktywności. Z kolei tej intencji można użyć do pobrania przekazanych w niej
informacji. Konkretny sposób pobierania informacji z intencji zależy od ich
typu. Na przykład jeśli wiemy, że intencja zawiera łańcuch znaków o nazwie
”message”
, to możemy go pobrać, używając następującego fragmentu kodu:
Intent intent = getIntent();
String string = intent.getStringExtra(“message”);
Nasze możliwości nie ograniczają się jednak do pobierania wyłącznie
łańcuchów znaków. Na przykład poniższe wywołanie:
int intNum = intent.getIntExtra(”name”, default_value);
pozwala pobrać wartość typu
int
o nazwie
name
. Argument
default_value
określa wartość domyślną.
Do intencji można dodawać
wartości wielu różnych typów.
Wszystkie dostępne typy można
poznać, przeglądając dokumentację
Androida. Oprócz tego informacje
te będą także wyświetlane
przez Android Studio podczas
wpisywania kodu.
Pobiera intencję.
Pobiera łańcuch znaków
o nazwie „message”
przekazany w intencji.
Do: ReceiveMessageActivity
message: “Witam!”
Metoda putExtra()
umożliwia
dodawanie
do wysyłanych
komunikatów
dodatkowych
informacji.
Do: ReceiveMessageActivity
message: “Witam!”
Intencja
Intencja
¨
Utworzenie pierwszej aktywności
¨
Utworzenie drugiej aktywności
¨
Wywołanie drugiej aktywności
¨
Przekazanie danych
Wiele aktywności i intencji
93
jesteś tutaj
Zagadkowy basen
Twoim zadaniem jest powyciąganie z basenu
fragmentów kodu i wstawienie ich w odpowiednie
puste miejsca pliku CreateMessageActivity.java.
Żadnego fragmentu kodu nie można użyć więcej
niż raz, lecz nie wszystkie fragmenty będą
potrzebne. Twoim celem jest skompletowanie
aktywności, która będzie pobierać tekst z widoku
tekstowego i zapisywać go w intencji.
import
android.widget.EditText
;
;
;
;
EditText
messageView
EditText
(
)
findViewById
(
)
R.id.message
String
messageText
=
messageView
.
getText()
.
toString()
intent
.
putExtra
(
)
,
messageText
“message
putExtraString
=
package com.hfad.komunikator;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
.............................................
public class CreateMessageActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_message);
}
// Metoda onSendMessage() jest wywoływana po kliknięciu przycisku
public void onSendMessage(View view) {
.......................................................
.......................................................
Intent intent = new Intent(this, ReceiveMessageActivity.class);
.......................................................
startActivity(intent);
}
}
Uwaga: Każdy
fragment z basenu
może być użyty
tylko raz!
94
Rozdział 3.
Rozwiązanie zagadkowego basenu
putExtraString
Musisz
zaimportować
klasę EditText.
Te dwa wiersze
pobierają tekst
z pola tekstowego
o identyfikatorze
„message”.
Ten wiersz dodaje tekst do
intencji, nadając mu nazwę
„message”.
Ten fragment kodu
nie był potrzebny.
Zagadkowy basen. Rozwiązanie
Twoim zadaniem jest powyciąganie
z basenu fragmentów kodu
iwstawienie ich w odpowiednie
puste miejsca pliku
CreateMessageActivity.java.
Żadnego fragmentu kodu
nie można użyć więcej niż
raz, lecz nie wszystkie fragmenty
będą potrzebne. Twoim celem jest
skompletowanie aktywności, która
będzie pobierać tekst z widoku
tekstowego i zapisywać go w intencji.
package com.hfad.komunikator;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
.............................................
public class CreateMessageActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_message);
}
// Metoda onSendMessage() jest wywoływana po kliknięciu przycisku
public void onSendMessage(View view) {
...........................................................
...........................................................
Intent intent = new Intent(this, ReceiveMessageActivity.class);
.......................................................
startActivity(intent);
}
}
import android.widget.EditText
EditText messageView = (EditText) findViewById(R.id.message);
String messageText = messageView.getText().toString();
intent.putExtra("message", messageText);

Get Android Programowanie aplikacji. Rusz głową! Wydanie II now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.