Xamarin – Activity, nawigacja, LinearLayout

Przygotowując wpis o yield, który podzielił mi się aż na 3 części, kontynuuję tworzenie aplikacji do długów. Dzisiaj utworzymy drugi widok – służący edycji wpisu, oraz przyjrzymy się nawigacji i przekazywaniu parametrów.

Activity

Tym słowem określana jest pojedyncza strona w aplikacji. Aby ją utworzyć, musimy dodać dwa nowe pliki do projektu – Layout (widok) i Activity (code behind).

Po utworzeniu Layoutu, do klasy Resources dojdzie nam nowy const z jego adresem. Dzięki temu możemy potem powiązać z nim Activity. Mamy tu także okazję ustawienia nazwy oraz ikony widoku. Możemy także podać kilkanaście dodatkowych parametrów, które są widoczne na bannerze tego wpisu. Aktualnie te dwa nam w zupełności wystarczą.

Jedyną różnicą między tą klasą, a MainActivity jest brak parametru – MainLauncher = true. Teoretycznie wskazuje on na to, który widok służy za odpalenie aplikacji, jednak ustawiając go na obu aktywnościach, zauważyłem że aplikacja zainstalowała się dwukrotnie – każda z innym ekranem startowym.

Nawigacja

Rozszerzmy sobie dodany ostatnio DebtListViewAdapter o Button, który przekaże nam dane do edycji, oraz zmieni wyświetlaną stronę. Wystarczy przeciągnąć guzik do XML’a i ustawić mu odpowiednie ID. Event podpinamy standardowo w adapterze:

Pierwszym krokiem do rozpoczęcia nawigacji jest utworzenie Intent. Słownik tłumaczy to jako ‚zamiar’. Sprawdźmy co na ten temat powie nam oficjalna dokumentacja:

An intent is an abstract description of an operation to be performed. It can be used with startActivity to launch an Activity, (…) and startService(Intent) or bindService(Intent, ServiceConnection, int) to communicate with a background Service.Intent | Android Developers

Dzięki tej klasie możemy przekazać parametry do innego widoku. Muszą być to jednak proste typy. Z początku myślałem o przekazaniu ID, ale w sumie skoro mamy dostępny cały obiekt, to po co go później dodatkowo wyszukiwać? Niech przyjdzie nam z pomocą nasz ukochany Newtonsoft.Json.

Następnie rozpoczynamy nowe Activity edycyjne, które utworzyliśmy na początku. Ciekawą opcją jest linijka, którą pozostawię zakomentowaną. Domyślnie możemy cofać ekrany w aplkacji poprzez strzałkę wstecz na telefonie. Finish() blokuje tą opcję.

Ostatnim krokiem jest rozszerzenie klasy EditActivity o deserializację przekazanego parametru:

LinearLayout

Poprawiłem też troszkę wygląd listy dłużników, a dokładniej to wzór pojedynczego wpisu. Poprzednio wszystkie kontrolki w XML wrzucone były w LinearLayout. Dowiedziałem się, że działa on podobnie do znanego mi z WP/WPF StackPanelu. Jeśli ktoś nie zna tej kontrolki – układa ona wszystkie swoje dzieci jedno pod drugim, pionowo lub poziomo. Wystarczyło dodać kolejny LinearLayout (poziomy), w którym umieściłem najważniejsze dane.

Zachęcam do podglądu tego pliku na Gicie. Używając pseudokodu, XML wygląda teraz tak:

Aplikacja zaczyna powoli nabierać kształtów. Zauważyłem teraz, że brakuje jej pola na komentarz…