Xamarin.Forms Třída aplikace

Základní Application třída nabízí následující funkce, které jsou vystaveny ve výchozí podtřídě App projektů:

  • Vlastnost, MainPage ve které se má nastavit počáteční stránka aplikace.
  • Trvalý 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.

Zpřístupňuje také metody životního cyklu, jako jsou , a , a také OnSleepOnResume modální navigační události.

V závislosti na tom, kterou šablonu jste zvolili, může být třída definována App jedním ze dvou způsobů:

  • C#nebo
  • XAML C #

Pokud chcete vytvořit třídu App pomocí XAML, musí být výchozí třída App nahrazena třídou aplikace XAML a přidruženým kódem na pozadí, 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 na pozadí:

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

Stejně jako nastavení vlastnosti _Application_MainPage" data-linktype="absolute-path">musí kód na pozadí také zavolat metodu pro načtení a parsování přidruženého MainPage kódu InitializeComponent XAML.

MainPage – vlastnost

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

Ve třídě můžete například vytvořit logiku pro zobrazení jiné stránky v závislosti na tom, jestli je uživatel přihlášený nebo App ne.

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

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

Slovník vlastností

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

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

Trvalou vlastnost můžete například nastavit kdekoli v kódu (při výběru položky, v metodě stránky nebo v metodě "id"OnDisappearing ) tímto OnSleep způsobem:

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

V metodách nebo pak můžete tuto hodnotu použít k nějakému opětovnému vytvoření OnStartOnResume uživatelského prostředí. Slovník ukládá hodnoty , takže před použitím Propertiesobject je potřeba přetypovat její hodnotu.

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

Před přístupem k tomuto klíči vždy zkontrolujte jeho přítomnost, 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 dostupná, když se aplikace vrátí z pozadí nebo dokonce po restartování.

Xamarin.Forms 1.4 zavedl další metodu ve třídě , kterou je možné volat pro proaktivní ApplicationSavePropertiesAsync() zachování Properties slovníku. To vám umožní ukládat vlastnosti po důležitých aktualizacích místo rizika, že se nebudou serializovat z důvodu selhání nebo ukončení operačním systémem.

Odkazy na používání slovníku najdete v části Creating PropertiesProperties book chapters Xamarin.Forms, 15, and 20a v přidružených ukázkách.

Třída aplikace

Kompletní implementace Application 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á se metodě , kde je objekt načten a LoadApplicationMainPage zobrazen uživateli. Kód pro jednotlivé platformy je uveden v následujících částech. Nejnovější šablony Xamarin.Forms řešení už obsahují veškerý tento kód předem nakonfigurovaný pro vaši aplikaci.

Projekt pro iOS

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

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

  • Vždy vraťte 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 pro Android

Android MainActivity dědí z FormsAppCompatActivity . V OnCreate přepsání je LoadApplication metoda volána 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í 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 objektu Xamarin.FormsApp . Všimněte si, že je vhodné explicitně použít obor názvů aplikace k kvalifikaci, protože aplikace UPW také mají svou vlastní AppApp třídu nesouvisející s Xamarin.Forms .

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

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

Všimněte Forms.Init() si, že musí být volána Forms.Init() v projektu UPW.

Další informace najdete v tématu Nastavení Windows projekty, který obsahuje kroky pro přidání projektu UPW do existujícího řešení, které není cílem UPW.

Další videa o Xamarinu najdete na Channel 9 a YouTube.