Bagikan melalui


Ringkasan Bab 24. Navigasi halaman

Catatan

Buku ini diterbitkan pada musim semi 2016, dan belum diperbarui sejak saat itu. Ada banyak dalam buku yang tetap berharga, tetapi beberapa materi sudah kedaluarsa, dan beberapa topik tidak lagi sepenuhnya benar atau lengkap.

Banyak aplikasi terdiri dari beberapa halaman di antaranya pengguna menavigasi. Aplikasi selalu memiliki halaman utama atau halaman beranda , dan dari sana pengguna menavigasi ke halaman lain, yang dipertahankan dalam tumpukan untuk menavigasi kembali. Opsi navigasi tambahan tercakup dalam Bab 25. Varietas Halaman.

VisualElementNavigation menentukan properti jenis INavigation, yang mencakup dua metode berikut untuk menavigasi ke halaman baru:

Kedua metode menerima Page instans sebagai argumen dan mengembalikan Task objek. Dua metode berikut menavigasi kembali ke halaman sebelumnya:

Jika antarmuka pengguna memiliki tombol Kembali sendiri (seperti yang dilakukan ponsel Android dan Windows) maka aplikasi tidak perlu memanggil metode ini.

Meskipun metode ini tersedia dari apa pun VisualElement, umumnya metode ini Navigation dipanggil dari properti instans saat ini Page .

Aplikasi umumnya menggunakan halaman modal ketika pengguna diharuskan untuk memberikan beberapa informasi di halaman sebelum kembali ke halaman sebelumnya. Halaman yang tidak dimodifikasi terkadang disebut modeless atau hierarkis. Tidak ada di halaman itu sendiri yang membedakannya sebagai modal atau modeless; diatur sebagai gantinya oleh metode yang digunakan untuk menavigasi ke metode tersebut. Untuk bekerja di semua platform, halaman modal harus menyediakan antarmuka penggunanya sendiri untuk menavigasi kembali ke halaman sebelumnya.

Sampel ModelessAndModal memungkinkan Anda menjelajahi perbedaan antara halaman modeless dan modal. Aplikasi apa pun yang menggunakan navigasi halaman harus meneruskan halaman berandanya ke NavigationPage konstruktor, umumnya di kelas program App . Salah satu bonus adalah Anda tidak perlu lagi mengatur Padding di halaman untuk iOS.

Anda akan menemukan bahwa untuk halaman tanpa mode, properti halaman Title ditampilkan. Platform iOS, Android, dan tablet dan desktop Windows semuanya menyediakan elemen antarmuka pengguna untuk menavigasi kembali ke halaman sebelumnya. Tentu saja, perangkat Ponsel Android, dan Windows memiliki tombol Kembali standar untuk kembali.

Untuk halaman modal, halaman Title tidak ditampilkan, dan tidak ada elemen antarmuka pengguna yang disediakan untuk kembali ke halaman sebelumnya. Meskipun Anda dapat menggunakan tombol Kembali standar ponsel Android dan Windows untuk kembali ke halaman sebelumnya, halaman modal di platform lain harus menyediakan mekanismenya sendiri untuk kembali.

Transisi halaman animasi

Versi alternatif dari berbagai metode navigasi disediakan dengan argumen Boolean kedua yang Anda atur true jika Anda ingin transisi halaman menyertakan animasi:

Namun, metode navigasi halaman standar mencakup animasi secara default, jadi ini hanya berharga untuk menavigasi ke halaman tertentu pada startup (seperti yang dibahas menjelang akhir bab ini) atau saat menyediakan animasi masuk Anda sendiri (seperti yang dibahas dalam Bab22. Animasi).

Variasi visual dan fungsi

NavigationPage menyertakan dua properti yang dapat Anda tetapkan saat membuat instans kelas dalam metode Anda App :

NavigationPage juga mencakup empat properti yang dapat diikat terlampir yang memengaruhi halaman tertentu tempat properti tersebut diatur:

Menjelajahi mekanika

Metode navigasi halaman semuanya asinkron dan harus digunakan dengan await. Penyelesaian tidak menunjukkan bahwa navigasi halaman telah selesai, tetapi hanya aman untuk memeriksa tumpukan navigasi halaman.

Ketika satu halaman menavigasi ke halaman lain, halaman pertama umumnya mendapatkan panggilan ke metodenya OnDisappearing , dan halaman kedua mendapatkan panggilan ke metodenya OnAppearing . Demikian pula, ketika satu halaman kembali ke halaman lain, halaman pertama mendapatkan panggilan ke metodenya, dan halaman kedua umumnya OnDisappearing mendapatkan panggilan ke metodenya OnAppearing . Urutan panggilan ini (dan penyelesaian metode asinkron yang memanggil navigasi) tergantung pada platform. Penggunaan kata "umumnya" dalam dua pernyataan sebelumnya disebabkan oleh navigasi halaman modal Android, di mana panggilan metode ini tidak terjadi.

Selain itu, panggilan ke OnAppearing metode dan OnDisappearing tidak selalu menunjukkan navigasi halaman.

Antarmuka INavigation mencakup dua properti koleksi yang memungkinkan Anda memeriksa tumpukan navigasi:

  • NavigationStack tipe IReadOnlyList<Page> untuk tumpukan tanpa mode
  • ModalStack tipe IReadOnlyList<Page> untuk tumpukan modal

Paling aman untuk mengakses tumpukan ini dari Navigation properti NavigationPage (yang seharusnya menjadi App properti kelas MainPage ). Hanya aman untuk memeriksa tumpukan ini setelah metode navigasi halaman asinkron selesai. Properti CurrentPageNavigationPage tidak menunjukkan halaman saat ini jika halaman saat ini adalah halaman modal, tetapi menunjukkan sebagai gantinya halaman tanpa mode terakhir.

Sampel SinglePageNavigation memungkinkan Anda menjelajahi navigasi halaman dan tumpukan, dan jenis legal navigasi halaman:

  • Halaman tanpa mode dapat menavigasi ke halaman tanpa mode lain atau halaman modal
  • Halaman modal hanya dapat menavigasi ke halaman modal lain

Memberlakukan modalitas

Aplikasi menggunakan halaman modal saat diperlukan untuk mendapatkan beberapa informasi dari pengguna. Pengguna harus dilarang kembali ke halaman sebelumnya hingga informasi tersebut diberikan. Di iOS, mudah untuk menyediakan tombol Kembali dan mengaktifkannya hanya ketika pengguna telah selesai dengan halaman. Tetapi untuk perangkat ponsel Android dan Windows, aplikasi harus mengambil OnBackButtonPressed alih metode dan mengembalikan true jika program telah menangani tombol Kembali itu sendiri, seperti yang ditunjukkan dalam sampel ModalEnforcement.

Sampel MvvmEnforcement menunjukkan cara kerjanya dalam skenario MVVM.

Jika halaman modal tertentu dapat dinavigasi beberapa kali, halaman tersebut harus menyimpan informasi sehingga pengguna dapat mengedit informasi daripada mengetik semuanya lagi. Anda dapat menangani ini dengan mempertahankan instans tertentu dari halaman modal, tetapi pendekatan yang lebih baik (terutama di iOS) mempertahankan informasi dalam model tampilan.

Membuat menu navigasi

Sampel ViewGalleryType menunjukkan menggunakan TableView item menu untuk mencantumkan. Setiap item dikaitkan dengan Type objek untuk halaman tertentu. Ketika item tersebut dipilih, program membuat instans halaman dan menavigasi ke item tersebut.

Cuplikan layar tiga kali dari Tipe Galeri Tampilan

Sampel ViewGalleryInst sedikit berbeda karena menu berisi instans setiap halaman daripada jenis. Ini membantu menyimpan informasi dari setiap halaman, tetapi semua halaman harus dibuat saat startup program.

Memanipulasi tumpukan navigasi

StackManipulation menunjukkan beberapa fungsi yang ditentukan oleh INavigation yang memungkinkan Anda memanipulasi tumpukan navigasi secara terstruktur:

Pembuatan halaman dinamis

Sampel BuildAPage menunjukkan pembuatan halaman saat runtime berdasarkan input pengguna.

Pola transfer data

Seringkali perlu berbagi data antar halaman — untuk mentransfer data ke halaman yang dinavigasi, dan agar halaman mengembalikan data ke halaman yang memanggilnya. Ada beberapa teknik untuk melakukan ini.

Argumen konstruktor

Saat menavigasi ke halaman baru, dimungkinkan untuk membuat instans kelas halaman dengan argumen konstruktor yang memungkinkan halaman menginisialisasi dirinya sendiri. Sampel SchoolAndStudents menunjukkan hal ini. Halaman yang dinavigasi juga dapat diatur oleh halaman yang menavigasi BindingContext ke halaman tersebut.

Properti dan panggilan metode

Contoh transfer data yang tersisa menjelajahi masalah meneruskan informasi antar halaman saat satu halaman menavigasi ke halaman lain dan kembali. Dalam diskusi ini, halaman beranda menavigasi ke halaman info, dan harus mentransfer informasi yang diinisialisasi ke halaman info. Halaman info mendapatkan informasi tambahan dari pengguna dan mentransfer informasi ke halaman beranda .

Beranda dapat dengan mudah mengakses metode dan properti publik di halaman info segera setelah membuat instans halaman tersebut. Halaman info juga dapat mengakses metode dan properti publik di beranda , tetapi memilih waktu yang tepat untuk ini bisa sulit. Sampel DateTransfer1 melakukan ini dalam penimpaannya OnDisappearing . Salah satu kelemahannya adalah bahwa halaman info perlu mengetahui jenis halaman beranda .

MessagingCenter

Kelas ini Xamarin.FormsMessagingCenter menyediakan cara lain bagi dua halaman untuk berkomunikasi satu sama lain. Pesan diidentifikasi oleh string teks dan dapat disertai dengan objek apa pun.

Program yang ingin menerima pesan dari jenis tertentu harus berlangganannya menggunakan MessagingCenter.Subscribe dan menentukan fungsi panggilan balik. Nantinya dapat berhenti berlangganan dengan memanggil MessagingCenter.Unsubscribe. Fungsi panggilan balik menerima pesan apa pun yang dikirim dari jenis yang ditentukan dengan nama yang ditentukan yang dikirim melalui Send metode .

Program DateTransfer2 menunjukkan cara mentransfer data menggunakan pusat olahpesan, tetapi sekali lagi ini mengharuskan halaman info mengetahui jenis halaman beranda .

Acara

Acara ini adalah pendekatan yang dihormati waktu bagi satu kelas untuk mengirim informasi ke kelas lain tanpa mengetahui jenis kelas tersebut. Dalam sampel DateTransfer3, kelas info menentukan peristiwa yang diaktifkannya saat informasi siap. Namun, tidak ada tempat yang nyaman bagi halaman beranda untuk melepaskan penanganan aktivitas.

Perantara kelas Aplikasi

Sampel DateTransfer4 memperlihatkan cara mengakses properti yang App ditentukan di kelas oleh halaman beranda dan halaman info . Ini adalah solusi yang baik, tetapi bagian berikutnya menjelaskan sesuatu yang lebih baik.

Beralih ke ViewModel

Menggunakan ViewModel untuk informasi memungkinkan halaman beranda dan halaman info untuk berbagi instans kelas informasi. Ini ditunjukkan dalam sampel DateTransfer5.

Menyimpan dan memulihkan status halaman

Perantara App kelas atau pendekatan ViewModel sangat ideal ketika aplikasi harus menyimpan informasi jika program tidur saat halaman info aktif. Sampel DateTransfer6 menunjukkan ini.

Menyimpan dan memulihkan tumpukan navigasi

Dalam kasus umum, program perkalian yang tidur harus menavigasi ke halaman yang sama ketika dipulihkan. Ini berarti bahwa program seperti itu harus menyimpan isi tumpukan navigasi. Bagian ini menunjukkan cara mengotomatiskan proses ini di kelas yang dirancang untuk tujuan ini. Kelas ini juga memanggil halaman individual untuk memungkinkan mereka menyimpan dan memulihkan status halaman mereka.

Pustaka Xamarin.FormsBook.Toolkit mendefinisikan antarmuka bernama IPersistantPage yang dapat diterapkan kelas untuk menyimpan dan memulihkan item dalam Properties kamus.

Kelas MultiPageRestorableApp di Xamarin.Formspustaka Book.Toolkit berasal dari Application. Anda kemudian dapat memperoleh kelas Anda App dari MultiPageRestorableApp dan melakukan beberapa housekeeping.

StackRestoreDemo menunjukkan penggunaan MultiPageRestorableApp.

Sesuatu seperti aplikasi kehidupan nyata

Sampel NoteTaker juga memanfaatkan MultiPageRestorableApp dan memungkinkan memasukkan dan mengedit catatan yang disimpan dalam Properties kamus.