2014-01-29 11 views
17

Ich habeWie registriere ich meine eigene Anwendung Unterklasse in Xamarin.Android?

public class MyApp : Application 

In Java ich eine Linie zum Manifest hinzufügen würde und es den Namespace und den Namen meiner Anwendung übergeben:

<application android:icon="@drawable/icon" android:label="@string/app_name" 
    android:name="com.devahead.extendingandroidapplication.MyApplication"> 

In Xamarin gibt es das [Application] Attribut aber die Dokumentation gibt an, dass das Name Mitglied not supported ist. Wie bekomme ich meine Unterklasse registriert? Wo soll das Attribut angewendet werden?

Wenn ich das Attribut auf meine Unterklasse hinzufügen, die ich erhalten:

System.NotSupportedException: Unable to activate instance of type TestClient_Android.MyApplication from native handle 14d00019 

Antwort

47

es gefunden. Die Dokumentation ist veraltet. Sie erhalten eine spezielle c'tor mit zwei Parameter benötigen und Sie das [Application] Attribut hinzufügen müssen:

[Application] 
public class MyApplication : Application 
{ 
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip) 
    { 
    } 
} 

EDIT: Darüber hinaus scheint es eine OnCreate() außer Kraft zu setzen hat. Wenn Sie nur den Konstruktor haben, wird es nicht aufgerufen.

public override void OnCreate() 
{ 
    // If OnCreate is overridden, the overridden c'tor will also be called. 
    base.OnCreate(); 
} 

EDIT November 2015: hier ist ein Link auf die Xamarin Dokumentation, die why this behavior exists erklärt.

... Xamarin.Android hakt in diese durch eine Zugabe von mono.MonoRuntimeProvider Contentprovider zu AndroidManifest.xml während der Build-Prozess. Die mono.MonoRuntimeProvider.attachInfo() Methode ist verantwortlich für das Laden der Mono-Laufzeit in den Prozess. Alle Versuche, Mono vor diesem Punkt zu verwenden, schlagen fehl. (Hinweis: Diese Deshalb Typen, die Android.App.Application Unterklasse benötigen einen (IntPtr, JniHandleOwnership) Konstruktor zur Verfügung zu stellen, da die Anwendungsinstanz erstellt wird, bevor Mono kann initialisiert werden.)

+0

Tis wirklich schwer zu finden Sie die Antwort so für Mono/Xamarin android –

+0

Die Notation fand ich [hier] (http://Stackoverflow.com/a/9963637/426227) oder [hier] (https://manski.net/2012/04/ creating-a-application-class-in-mono-für-android /) ist etwas anders ('javaReference' anstelle von' handle'). Macht das einen Unterschied? – testing

+0

@ testing, wie Sie die Parameter benennen, spielt keine Rolle. Die Typen müssen übereinstimmen. – Krumelur

Verwandte Themen