Quantcast
Channel: Xamarin.Forms — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 89864

Speeding up Navigation

$
0
0

Hi, I have a little problem with my application.
It takes ages to navigate between pages.
My UIs are quite complex and some of the views have 1300lines of xaml code.
It takes around 4-5 seconds to change from one view to another. The xaml compilation is enebled.

public class Navigation
{

    // MAIN NAVIGATION, YOU CAN DEFINE MORE NAVIGATION TABS IN CONSTRUCTOR

    // List of navigation tabs
    public ObservableCollection<NavigationItem> NavigationItems { get; set; }
    Main MainPage { get; set; }
    Trends TrendsPage { get; set; }
    Settings SettingsPage { get; set; }
    //HOT_App.Views.Settings SettingsWindow;


    public Navigation()
    {
        NavigationItems = new ObservableCollection<NavigationItem>();

        NavigationItem Home = new NavigationItem("Home", "NavigationHome.png", true);
        NavigationItem Trends = new NavigationItem("Trends", "NavigationTrend.png", false);
        NavigationItem Settings = new NavigationItem("Settings", "SettingsIcon.png", false);


        NavigationItems.Add(Home);
        NavigationItems.Add(Trends);
        NavigationItems.Add(Settings);

    }


    public void ShowActiveNavigation()
    {
        System.Diagnostics.Debug.WriteLine(string.Join<NavigationItem>("\n", NavigationItems));
    }


    // navigation logic
    public async void SetActiveNavigation(string activeNavigationName)
    {
        NavigationItems[0].Active = false;
        NavigationItems[1].Active = false;
        NavigationItems[2].Active = false;
        //ChangeActiveValue(activeNavigationName);
        switch (activeNavigationName)
        {
            case "Home":
                NavigationItems[0].Active = true;
                //Application.Current.MainPage.Navigation.PopAsync(false);

                await Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
                System.Diagnostics.Debug.WriteLine("Home");
                break;
            case "Trends":
                NavigationItems[1].Active = true;
                //Application.Current.MainPage.Navigation.PopAsync(false);
                await Application.Current.MainPage.Navigation.PushAsync(new MainPage(), false);
                System.Diagnostics.Debug.WriteLine("Trends");
                break;
            case "Settings":
                NavigationItems[2].Active = true;
                //Application.Current.MainPage.Navigation.PopAsync(false);
                await Application.Current.MainPage.Navigation.PushAsync(new HOT_App.Views.Settings(), false);
                System.Diagnostics.Debug.WriteLine("Settings");
                break;
            default:
                NavigationItems[0].Active = true;
                await Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
                System.Diagnostics.Debug.WriteLine("Home");
                break;

        }

    }

    // updates active navigation tab
    public void ChangeActiveValue(string activeNavigationName)
    {
        foreach (NavigationItem navigationItem in NavigationItems)
        {

            if (navigationItem.NavigationItemName == activeNavigationName)
            {
                navigationItem.Active = true;
            }
            else { navigationItem.Active = false; }
        }
    }

}

Is there any way how to reuse the views instead of creating new ones? Like Instead of
Application.Current.MainPage.Navigation.PushAsync(new Main(), false);
I would write soemthing like but it doesnt work
Main Mainpage= new Main();
Application.Current.MainPage.Navigation.PushAsync(Mainpage, false);

Any ideas?


Viewing all articles
Browse latest Browse all 89864

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>