Xamarin.Forms Master/Detail back stack with Prism - xamarin.forms

I'm using Xamarin.Forms with Prism and a Master/Detail to create a "hamburger" menu. When the app runs, I navigate to NavigationService.NavigateAsync("MyMasterDetailPage/MyNavigationPage/MainPage");
I have items in the Master flyout menu for navigating to other pages. So I tap one and navigate to MyNavigationPage/SyncPage. At this point, if I hit the back button on Android, the app closes. Instead, I'd like to navigate back to the MainPage. I tried to hook into OnNavigatedFrom of the SyncPage to force navigation back to MainPage but the app is already closing by the time that event fires.

Implement the INavigationPageOptions interface on MyNavigationPage and set ClearNavigationStackOnNavigation = false

I implemented a solution similar to what Brian suggested but had to add a check to return true if it's the first time through in order to work correctly.

Related

Changing a tab page when pressing the back button in Xamarin.Forms and Prism

I have a Xamarin.Forms application using Prism (Xamarin.Forms v4.5.0; Prism v7.2.0).
The main application is 4 tabbed pages. Using the Prism NavigationService I can switch tabs easily using something like this - NavigationService.SelectTabAsync("Page2");
But if the user presses the back button, it just exits the application.
Is there a way to add the tab changes into the navigation stack so pressing back would just go to the previously selected tab?

Xamarin.Forms. Navigate from detail to master page on swipe

There is a list on the main page. When you tap on item opens page with full data about that item (Navigation.PushAsync). I need to implement on Android and iOS, so that when you swipe back on master page(Navigation.PopAsync).
As below shown:
I am using SwipeGestureRecognizer. But the animation itself (pull the page) I do not have.
How to implement this on gif above?

Respond to split-screen changes in Xamarin.Forms

In my Xamarin.Forms app, I have a MasterDetailPage with MasterBehavior set to Split when the device Idiom is Tablet. That is, I always want master page to be displayed.
The exception is during multitasking. For example, on iOS, if the user enters Split View, then I want the app to behave like it's on a phone, with no split view, but instead just a master or detail page displayed, and the proper navigation controls to move between them.
It seems like MasterDetailPage wants to help me with this. When I drag up another app to enter Split View on iOS, my app no longer shows the master page. However, the detail page that remains has no navigation control to return to the master.
What is the proper way to detect the mode change and dynamically adjust the navigation in Xamarin.Forms when your app enters and leaves Split View on iOS or split-screen mode on Android?

HelloWorld sample code not working on Android: Back button not visible

I got the sample app from
https://github.com/PrismLibrary/Prism/tree/master/Sandbox/Xamarin/HelloWorld
I tested it on Android 6:
Run the app from sample code (no modifications), it shows MainPage
Tap on ViewA from the menu, it navigates to ViewA, but there is no back button in the app bar.
Hitting device back button works, it navigates back to MainPage.
The behavior I am expecting is to see the back button in the bar too.
UPDATE
I'm debugging Prism, and I can see clearly that Prism's PageNavigationService navigates to ViewA by just calling currentPage.Navigation.PushAsync(page, animated).
I can see that the Xamarin Forms's NavigationImpl has the NavigationStack with two pages, MainPage and ViewA. So the MainPage is still there in the navigation stack, but for some reason the back button is not visible.
ANSWER!
#lowleetak discovered that there is a call somewhere in the sample which hides the back button!
The app start in MasterDetail page. Where the MasterPage is the Menu and DetailPage is the MyNavigationPage/MainPage initially.
When you click ViewA from menu, it is changing the DetailPage from MainPage to MyNavigationPage/ViewA. It is the root/initial page in the navigation stack of the DetailPage. So, there is no Back button showing.

Xamarin.Forms Back Stack of NavigationPage inside Details view of MasterDetail using PRISM

I'm using Xamarin.Forms with PRISM. My app start with navigating to MyMasterDetailPage/MyNavigationPage/MainPage. From the master page, I want to navigate to page2 and have a back arrow instead of the hamburger icon. Pressing that takes you back to MainPage and the hamburger icon is back. I have tried navigating to MyNavigationPage/page2 andMyMasterDetailPage/MyNavigationPage/page2` but it seems to be clearing the back stack. There may be other pages that need the behavior that I'm currently seeing, so being able to configure the behavior would be ideal (not always one way or the other).
You need to implement the INavigationPageOptions interface on your MyNavigationPage and set the ClearNavigationStackOnNavigation property to false.

Resources