Xamarin.Forms Třída aplikace

Základní Application třída nabízí následující funkce, které jsou vystaveny ve vašich projektech výchozí App podtřídy:

  • Vlastnost MainPage , která je místem, kde nastavit počáteční stránku aplikace.
  • Trvalý Properties slovník pro ukládání jednoduchých hodnot napříč změnami stavu životního cyklu.
  • Statická Current vlastnost, která obsahuje odkaz na aktuální objekt aplikace.

Zveřejňuje také metody životního cyklu , jako OnStartjsou , OnSleepa OnResume také modální navigační události.

V závislosti na zvolené App šabloně je možné třídu definovat jedním ze dvou způsobů:

  • C# nebo
  • XAML & C #

Pokud chcete vytvořit třídu aplikace pomocí XAML, musí být výchozí třída aplikace nahrazena třídou aplikace XAML a přidruženým kódem, jak je znázorněno v následujícím příkladu kódu:

<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Photos.App">

</Application>

Následující příklad kódu ukazuje přidružený kód za:

public partial class App : Application
{
    public App ()
    {
        InitializeComponent ();
        MainPage = new HomePage ();
    }
    ...
}

Stejně jako nastavení MainPage vlastnosti musí kód zavolat také metodu InitializeComponent pro načtení a parsování přidruženého XAML.

MainPage – vlastnost

Vlastnost MainPage třídy Application nastaví kořenovou stránku aplikace.

Můžete například vytvořit logiku ve třídě App , která zobrazí jinou stránku v závislosti na tom, jestli je uživatel přihlášený nebo ne.

Vlastnost MainPage by měla být nastavena v konstruktoru App ,

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
    }
}

Slovník vlastností

Podtřída Application má statický Properties slovník, který lze použít k ukládání dat, zejména pro použití v OnStart, OnSleepa OnResume metodách. K tomuto přístupu můžete přistupovat odkudkoli v Xamarin.Forms kódu pomocí Application.Current.Properties.

Slovník Properties používá string klíč a ukládá object hodnotu.

Můžete například nastavit trvalou "id" vlastnost kdekoli v kódu (když je vybraná položka, v metodě stránky OnDisappearing nebo v OnSleep metodě), takto:

Application.Current.Properties ["id"] = someClass.ID;

V těchto OnStart metodách OnResume pak můžete tuto hodnotu použít k opětovnému vytvoření uživatelského prostředí nějakým způsobem. Slovník Properties ukládá objecthodnoty tak, abyste před použitím museli přetypovat jeho hodnotu.

if (Application.Current.Properties.ContainsKey("id"))
{
    var id = Application.Current.Properties ["id"] as int;
    // do something with id
}

Před přístupem k klíči vždy zkontrolujte přítomnost klíče, abyste zabránili neočekávaným chybám.

Poznámka

Slovník Properties může serializovat pouze primitivní typy úložiště. Pokus o uložení jiných typů (například List<string>) může selhat bezobslužně.

Trvalosti

Slovník Properties se automaticky uloží do zařízení. Data přidaná do slovníku budou k dispozici, když se aplikace vrátí z pozadí nebo i po restartování.

Xamarin.Forms 1.4 zavedla další metodu třídy ApplicationSavePropertiesAsync() která se dá volat k proaktivnímu zachování slovníku Properties . To vám umožní uložit vlastnosti po důležitých aktualizacích, nikoli riskovat, že se serializuje kvůli chybovému ukončení nebo zabití operačním systémem.

Odkazy na používání slovníku Properties najdete v knizeVytváření mobilních aplikací Xamarin.Forms (viz kapitoly 6, 15 a 20) a v přidružených ukázkách.

Třída aplikace

Kompletní Application implementace třídy je uvedena níže pro referenci:

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
    }

    protected override void OnStart()
    {
        // Handle when your app starts
        Debug.WriteLine ("OnStart");
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
        Debug.WriteLine ("OnSleep");
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
        Debug.WriteLine ("OnResume");
    }
}

Tato třída se pak vytvoří instance v každém projektu specifickém pro platformu a předána metodě LoadApplication , která se MainPage načte a zobrazí uživateli. Kód pro každou platformu se zobrazí v následujících částech. Nejnovější Xamarin.Forms šablony řešení už obsahují veškerý tento kód předkonfigurovaný pro vaši aplikaci.

iOS projektu

Třída iOS AppDelegate dědí z FormsApplicationDelegate. Měla by:

  • Volání LoadApplication s instancí App třídy

  • Vždy vrátit base.FinishedLaunching (app, options);.

[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

projekt Android

Android MainActivity dědí z FormsAppCompatActivity. OnCreate V přepsání je LoadApplication volána metoda s instancí App třídy.

[Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true,
    ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : FormsAppCompatActivity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

Univerzální projekt Windows (UPW) pro Windows 10

Hlavní stránka projektu UPW by měla dědit z WindowsPage:

<forms:WindowsPage
   ...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
   ...>
</forms:WindowsPage>

Kód jazyka C# za konstrukcí musí volat LoadApplication , aby se vytvořila instance vaší Xamarin.FormsApp. Mějte na paměti, že je vhodné explicitně použít obor názvů aplikace k získání kvalifikace App , protože aplikace UPW mají také vlastní App třídu nesouvisející s Xamarin.Forms.

public sealed partial class MainPage
{
    public MainPage()
    {
        InitializeComponent();

        LoadApplication(new YOUR_NAMESPACE.App());
    }
 }

Všimněte si, že Forms.Init() je nutné volat z App.xaml.cs v projektu UPW.

Další informace najdete v tématu Nastavení Windows Projekty, které zahrnují kroky pro přidání projektu UPW do existujícího Xamarin.Forms řešení, které necílily UPW.

Další videa xamarinu najdete na Channel 9 a YouTube.