Udostępnij za pośrednictwem


Podsumowanie rozdziału 24. Nawigowanie między stronami

Uwaga

Ta książka została opublikowana wiosną 2016 roku i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre materiały są nieaktualne, a niektóre tematy nie są już całkowicie poprawne ani kompletne.

Wiele aplikacji składa się z wielu stron, między którymi użytkownik nawiguje. Aplikacja zawsze ma stronę główną lub stronę główną, a stamtąd użytkownik przechodzi do innych stron, które są przechowywane w stosie w celu nawigowania z powrotem. Dodatkowe opcje nawigacji zostały omówione w rozdziale 25. Odmiany stron.

VisualElementNavigation definiuje właściwość typu INavigation, która zawiera następujące dwie metody przechodzenia do nowej strony:

Obie metody akceptują Page wystąpienie jako argument i zwracają Task obiekt. Następujące dwie metody przechodzą z powrotem do poprzedniej strony:

Jeśli interfejs użytkownika ma własny przycisk Wstecz (jak działają telefony z systemami Android i Windows), nie jest konieczne, aby aplikacja wywołała te metody.

Chociaż te metody są dostępne z dowolnego VisualElementobiektu , zazwyczaj są wywoływane z Navigation właściwości bieżącego Page wystąpienia.

Aplikacje zazwyczaj używają modalnych stron, gdy użytkownik musi podać pewne informacje na stronie przed powrotem do poprzedniej strony. Strony, które nie są modalne, są czasami nazywane moderowymi lub hierarchicznymi. Nic na samej stronie nie rozróżnia go jako modalnego lub moderowego; Zamiast tego jest on zarządzany przez metodę używaną do przechodzenia do niej. Aby pracować na wszystkich platformach, modalna strona musi zapewnić własny interfejs użytkownika umożliwiający powrót do poprzedniej strony.

Przykład ModelessAndModal umożliwia eksplorowanie różnic między stronami moderacyjnymi i modalnymi. Każda aplikacja korzystająca z nawigacji stron musi przekazać stronę główną do NavigationPage konstruktora, zazwyczaj w klasie programu App . Jedną z zalet jest to, że nie trzeba już ustawiać elementu Padding na stronie dla systemu iOS.

Zobaczysz, że dla stron bez moderowania zostanie wyświetlona Title właściwość strony. Wszystkie platformy tabletów i komputerów stacjonarnych z systemem iOS, Android i iOS zapewniają element interfejsu użytkownika, aby wrócić do poprzedniej strony. Oczywiście urządzenia z systemami Android i Windows Phone mają standardowy przycisk Wstecz , aby wrócić.

W przypadku stron modalnych strona Title nie jest wyświetlana, a żaden element interfejsu użytkownika nie jest udostępniany, aby wrócić do poprzedniej strony. Mimo że można użyć standardowego przycisku Wstecz systemu Android i Windows Phone, aby powrócić do poprzedniej strony, modalna strona na innych platformach musi zapewnić własny mechanizm, aby wrócić.

Animowane przejścia stron

Alternatywne wersje różnych metod nawigacji są dostarczane z drugim argumentem logicznym ustawionym true na , jeśli chcesz, aby przejście strony obejmowało animację:

Jednak standardowe metody nawigacji stron domyślnie zawierają animację, więc są one przydatne tylko do przechodzenia do określonej strony podczas uruchamiania (zgodnie z opisem na końcu tego rozdziału) lub podczas udostępniania własnej animacji wejścia (zgodnie z opisem w rozdziale22). Animacja).

Odmiany wizualne i funkcjonalne

NavigationPage Zawiera dwie właściwości, które można ustawić podczas tworzenia wystąpienia klasy w metodzie App :

NavigationPage Zawiera również cztery dołączone powiązane właściwości, które wpływają na określoną stronę, na której są ustawione:

Eksplorowanie mechaniki

Metody nawigacji stron są asynchroniczne i powinny być używane z elementem await. Ukończenie nie wskazuje, że nawigacja po stronie została ukończona, ale tylko to, że można bezpiecznie zbadać stos nawigacji strony.

Gdy jedna strona przechodzi do innej, pierwsza strona zazwyczaj pobiera wywołanie metody OnDisappearing , a druga strona pobiera wywołanie metody OnAppearing . Podobnie, gdy jedna strona powróci do innej, pierwsza strona pobiera wywołanie metody, a druga strona zazwyczaj pobiera wywołanie OnDisappearing OnAppearing metody . Kolejność tych wywołań (a ukończenie metod asynchronicznych, które wywołują nawigację) jest zależne od platformy. Użycie słowa "ogólnie" w dwóch poprzednich instrukcjach wynika z nawigacji modalnej strony systemu Android, w której te wywołania metody nie występują.

Ponadto wywołania metod i OnDisappearing nie muszą wskazywać OnAppearing nawigacji między stronami.

Interfejs INavigation zawiera dwie właściwości kolekcji, które umożliwiają badanie stosu nawigacji:

Dostęp do tych stosów jest najbezpieczniejszy z Navigation właściwości NavigationPage (która powinna być właściwością App klasy MainPage ). Badanie tych stosów jest bezpieczne tylko po zakończeniu asynchronicznych metod nawigacji między stronami. Właściwość CurrentPage elementu NavigationPage nie wskazuje bieżącej strony, jeśli bieżąca strona jest stroną modalną, ale wskazuje zamiast tego ostatnią stronę bez moderowania.

Przykład SinglePageNavigation umożliwia eksplorowanie nawigacji stron i stosów oraz typów prawnych nawigacji stron:

  • Strona bez moderowania może przechodzić do innej strony bez moderowania lub strony modalnej
  • Modalna strona może przechodzić tylko do innej strony modalnej

Wymuszanie modalności

Aplikacja używa strony modalnej, gdy konieczne jest uzyskanie pewnych informacji od użytkownika. Użytkownik nie powinien wracać do poprzedniej strony do momentu podania tych informacji. W systemie iOS można łatwo podać przycisk Wstecz i włączyć go tylko wtedy, gdy użytkownik zakończy pracę ze stroną. Jednak w przypadku urządzeń z systemem Android i Windows Phone aplikacja powinna zastąpić metodę i zwrócićtrue, jeśli program obsłużył sam przycisk Wstecz, jak pokazano w przykładzie ModalEnforcement.OnBackButtonPressed

Przykład MvvmEnforcement pokazuje, jak to działa w scenariuszu MVVM.

Jeśli konkretna modalna strona może być przechodzina do wielu razy, powinna zachować informacje, aby użytkownik mógł edytować informacje, zamiast wpisywać je ponownie. Można to obsłużyć, zachowując konkretne wystąpienie strony modalnej, ale lepsze podejście (szczególnie w systemie iOS) zachowuje informacje w modelu widoku.

Tworzenie menu nawigacji

Przykład ViewGalleryType demonstruje użycie elementów TableView menu do wyświetlenia. Każdy element jest skojarzony z obiektem Type dla określonej strony. Po wybraniu tego elementu program tworzy wystąpienie strony i przechodzi do niej.

Potrójny zrzut ekranu przedstawiający typ galerii widoków

Przykład ViewGalleryInst jest nieco inny niż w menu zawierający wystąpienia każdej strony, a nie typy. Pomaga to zachować informacje z każdej strony, ale wszystkie strony muszą zostać utworzone podczas uruchamiania programu.

Manipulowanie stosem nawigacji

StackManipulation demonstruje kilka funkcji zdefiniowanych przez INavigation to, które umożliwiają manipulowanie stosem nawigacji w sposób ustrukturyzowany:

Dynamiczne generowanie stron

Przykład BuildAPage przedstawia konstruowanie strony w czasie wykonywania na podstawie danych wejściowych użytkownika.

Wzorce transferu danych

Często konieczne jest udostępnianie danych między stronami — przesyłanie danych do strony nawigowanej oraz zwracanie danych do strony, która ją wywołała. Istnieje kilka technik w tym celu.

Argumenty konstruktora

Podczas przechodzenia do nowej strony można utworzyć wystąpienie klasy strony za pomocą argumentu konstruktora, który umożliwia stronie zainicjowanie się. Przykład SchoolAndStudents pokazuje to. Możliwe jest również, że nawigowana strona ma ustawioną BindingContext przez stronę przechodzącą do niej.

Właściwości i wywołania metod

Pozostałe przykłady transferu danych eksplorują problem przekazywania informacji między stronami, gdy jedna strona przechodzi do innej strony i z powrotem. W tych dyskusjach strona główna przechodzi do strony informacyjnej i musi przenieść zainicjowane informacje na stronę informacyjną. Strona informacyjna uzyskuje dodatkowe informacje od użytkownika i przekazuje informacje do strony głównej.

Strona główna może łatwo uzyskać dostęp do metod publicznych i właściwości na stronie informacji , gdy tylko utworzy wystąpienie tej strony. Strona informacyjna może również uzyskać dostęp do publicznych metod i właściwości na stronie głównej, ale wybranie odpowiedniego czasu może być trudne. Przykład DateTransfer1 wykonuje to w zastąpieniu OnDisappearing . Jedną z wad jest to, że strona informacyjna musi znać typ strony głównej.

MessagingCenter

Klasa Xamarin.FormsMessagingCenter zapewnia inny sposób, aby dwie strony komunikowały się ze sobą. Komunikaty są identyfikowane przez ciąg tekstowy i mogą być dołączone przez dowolny obiekt.

Program, który chce odbierać komunikaty z określonego typu, musi je subskrybować przy użyciu funkcji MessagingCenter.Subscribe i określać funkcję wywołania zwrotnego. Później można anulować subskrypcję, wywołując polecenie MessagingCenter.Unsubscribe. Funkcja wywołania zwrotnego odbiera wszelkie komunikaty wysyłane z określonego typu o określonej nazwie wysyłanej Send za pośrednictwem metody.

Program DateTransfer2 pokazuje, jak przesyłać dane przy użyciu centrum obsługi komunikatów, ale ponownie wymaga to, aby strona informacyjna znała typ strony głównej.

Zdarzenia

Zdarzenie jest podejściem honorowym dla jednej klasy do wysyłania informacji do innej klasy bez znajomości typu tej klasy. W przykładzie DateTransfer3 klasa informacji definiuje zdarzenie, które jest uruchamiane, gdy informacje są gotowe. Nie ma jednak wygodnego miejsca dla strony głównej, aby odłączyć procedurę obsługi zdarzeń.

Pośrednik klas aplikacji

Przykład DateTransfer4 pokazuje, jak uzyskać dostęp do właściwości zdefiniowanych w App klasie zarówno przez stronę główną, jak i stronę informacyjną. Jest to dobre rozwiązanie, ale w następnej sekcji opisano coś lepszego.

Przełączanie do modelu ViewModel

Użycie modelu ViewModel dla informacji umożliwia stronie głównej i stronie informacyjnej udostępnianie wystąpienia klasy informacyjnej. Przedstawiono to w przykładzie DateTransfer5 .

Zapisywanie i przywracanie stanu strony

Pośrednicka App klasy lub metoda ViewModel jest idealna, gdy aplikacja musi zapisywać informacje, jeśli program przejdzie w stan uśpienia, gdy strona informacyjna jest aktywna. Przykład DateTransfer6 pokazuje to.

Zapisywanie i przywracanie stosu nawigacji

W ogólnym przypadku program wielostronicowy, który przechodzi w tryb uśpienia, powinien przejść do tej samej strony po przywróceniu. Oznacza to, że taki program powinien zapisać zawartość stosu nawigacji. W tej sekcji pokazano, jak zautomatyzować ten proces w klasie zaprojektowanej do tego celu. Ta klasa wywołuje również poszczególne strony, aby umożliwić im zapisywanie i przywracanie stanu strony.

Biblioteka Xamarin.FormsBook.Toolkit definiuje interfejs o nazwie IPersistantPage , który klasy mogą implementować w celu zapisywania i przywracania elementów w słowniku Properties .

Klasa MultiPageRestorableApp w bibliotece Xamarin.FormsBook.Toolkit pochodzi z klasy Application. Następnie możesz uzyskać swoją klasę App z MultiPageRestorableApp i wykonać kilka czynności domowych.

StackRestoreDemo demonstruje użycie elementu MultiPageRestorableApp.

Coś takiego jak prawdziwa aplikacja

Przykład NoteTaker korzysta również z MultiPageRestorableApp elementu i umożliwia wprowadzanie i edytowanie notatek zapisanych w słowniku Properties .