Troller
Troller

Reputation: 1138

Navigate between tabs using the back button

I am trying to create my first Xamarin mobile application, I am a bit confused when it comes to navigating back to the previous screen/tab using the back button (android). I have created a test project and I am using Xamarin form shell to define the hierarchy. The navigation type I am using is Tab. In my test application I got 2 tabs

This is my current method which I am using to navigate back to the first tab from the second tab if the user presses on the back button. I override OnBackButtonPressed method and execute a command that executes GoTo method.

    public partial class ItemsPage : ContentPage
        {
            ItemsViewModel _viewModel;
            public ICommand goBack; 
            public ItemsPage()
            {
                InitializeComponent();
                BindingContext = _viewModel = new ItemsViewModel();
                goBack = new Command(async (x) => await Shell.Current.GoToAsync("////AboutPage"));
            }
            protected override void OnAppearing()
            {
                base.OnAppearing();
                _viewModel.OnAppearing();           
            }
            protected override bool OnBackButtonPressed()
            {
                base.OnBackButtonPressed();
                goBack.Execute(null);
                return true;
            }
        }

This works, but the problem is, I have hardcoded the page I wanna go back to. In the future, I will be adding 2 more tabs, so in that case say for example if the user is on the 4th tab and the previous tab was Tab 3, how can I retrieve that information so that I can successfully navigate the user back to that previous tab or page? I tried to use the navigationstack in the Shell but couldn't figure out how to use it with tabs.

Thank you for your time.

Cheers

Edit

-Code in the AppShell which defines the hierarchy

    <?xml version="1.0" encoding="UTF-8"?>
    <Shell xmlns="http://xamarin.com/schemas/2014/forms" 
           xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
           xmlns:local="clr-namespace:TestApp03.Views"
           Title="TestApp03"
           x:Class="TestApp03.AppShell">
        <TabBar>
            <ShellContent Title="About" Icon="icon_about.png" Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
            <ShellContent Title="Browse" Icon="icon_feed.png" ContentTemplate="{DataTemplate local:ItemsPage}" />
        </TabBar>
    </Shell>

Upvotes: 0

Views: 773

Answers (1)

Wen xu Li
Wen xu Li

Reputation: 1686

You can use await Shell.Current.GoToAsync(".."); to achieve forward jump. For more usage, please refer to this link: https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/tabs

Upvotes: 1

Related Questions