Trochę o intencjach

W poprzednim poście pisałam o mojej pierwszej (jak przychylnie policzyć to nawet drugiej) aplikacji, która jest poprostu implementacją kodu z tutorialadevelopers.android.com. O tym, że składa się z dwóch klocków (komponentów) – aktywności. Pierwsza aktywność odpowiada za pojawienie się okienka z polem tekstowym i przyciskiem wyślij, a druga za pojawianie się ekranu z tekstem wiadomości.

Dziś, z racji na liczbę zjedzonych kawałków mazurka, krótki  tekst o tym jak pierwsza aktywność wywołuje drugą, czyli o klasie Intent. Obiekty z tej klasy będę nazywać intencjami, głównie dlatego że znalazłam książkę wydawnictwa O’Reilly z takim tłumaczeniem. Trochę też zaniepokoiła mnie pierwsza definicja w słowniku Merriam-Webster. Ufnie zakładam, że twórcom klasy chodziło o drugie znaczenie tego słowa. Czym są te intencje?

The unit of communication is intent class.

Programming Android, Second Edition by Z. Medniekes, L.Dornin, G. B. Meike & M.Nakamura copyright 2012 O’Reilly media, Inc.,978-1-449-316664-8

Obiekty z tej klasy reprezentują operacje, których jedna aktywność wymaga od kolejnej.

Intents form the basis of a system of loose coupling that allows activities to launch on another, and provide results. When an application dispatches an intent, it’s possible that several different activities might be registered to provide the desired operation.

Programming Android, Second Edition by Z. Medniekes, L.Dornin, G. B. Meike & M.Nakamura copyright 2012 O’Reilly media, Inc.,978-1-449-316664-8

W przypadku aplikacji z tutoriala sytuacja szczęśliwie jest prostsza. W klasie Moja Aktywność (czytelnikom, którzy nie czytali poprzedniego posta i zadają teraz pytanie jaka znów twoja aktywność? napiszę, że to ta pierwsza, która odpowiada za pojawienie się pierwszego widoku) jest zawarta metoda wyślij wiadomość. Jest ona wywoływana po wciśnięciu guzika wyślij. Wewnątrz niej jest zaincjowany obiekt intencja. Konstruktor pobiera tu dwa argumenty: kontekst aplikacji oraz klasę będącą komponentem, do którego system ma przekazać intencję (w tym przypadku jest to aktywność Pokaż wiadomość).

 

public void sendMessage(View view){
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

Metoda putExtra() umożliwia przekazanie danych do intencji (w tym przypadku tekstu wpisanej wiadmości :)).

A jak ten przekaz wygląda po stronie klasy Pokaż wiadomość? Metoda getIntent() zwraca intencję, która rozpoczęła daną aktywność, a metoda getStringExtra() pobiera tekst wpisanej wcześniej wiadomości.

Intent intent = getIntent();
String message = intent.getStringExtra(MojaAktywnosc.EXTRA_MESSAGE);

4 komentarze do “Trochę o intencjach

  1. jedna apka tygodniowo Autor wpisu

    Trochę namieszałam z tymi adresami. Najpierw zrobiłam jedną literówkę (JendaApka), a potem drugą (JednApka), ale wszystko jest już naprawione. Właściwy adres bloga to JednaApkaTygodniowo[dot]wordpress[dot]com.
    Dzięki za czujność i za kciuki!
    Pozdrawiam, Tosia

    Polubienie

    Odpowiedz
  2. binarnablondynka

    Przytoczona definicja intentu wygląda mi na klasyczną implementację eventów.
    W ramach ciekawostki teoretycznej możesz przeczytać o wzorcu projektowym Observer.
    https://en.wikipedia.org/wiki/Observer_pattern

    W tym wzorcu jeden obiekt wysyła informację o zajściu zdarzenia (ten obiekt to braodcaster), co powoduje automatyczną rekację wszystkich obiektów nasłuchujących (obiekty nasłuchujące nazywamy listeners albo subscribers).

    Obiektów listeners może być wiele, a każdy może zareagować na zdarzenie na swój włany sposób (reakcja na zdarzenie to po prostu odpalenie odpowiedniej metody obiektu nasłuchującego).

    Może w ramach kolejnej apki spróbujesz zaimplementować, że jeden intent będzie powodował reakcję kilku activities?

    Ps. Blog super, bardzo dobrze się czyta!Trzymam kciuki!!! :*

    Polubienie

    Odpowiedz

Dodaj komentarz