2016-01-19 9 views
5

Ich baue mein erstes Bibliotheksmodul, das ich mit wiederverwendbarem Code für mehrere Projekte füllen möchte. Mein erster Roadblock ist, dass ich in der Haupt-App eine Aktivität aus dem Bibliotheksmodul starten kann.Starten einer Aktivität in der Haupt-App von einem Android-Bibliotheksmodul

Zum Beispiel habe ich eine Splash-Screen-Aktivität. Es läuft für 2 Sekunden und startet dann die Hauptaktivität. Ich glaube, dass ich diese Splash Screen-Aktivität wiederverwenden kann, und ich möchte es in meinem Bibliotheksmodul einfügen. Ich bin mir jedoch nicht sicher, wie ich die Hauptaktivität aus der Bibliothek starten soll.

Mainfest in Haupt-App-Setup:

<activity 
    android:name="com.example.myLibraryModule.SplashScreen" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Das Manifest startet den Splash-Screen, die zur Zeit in meinem Bibliothek-Modul befindet.

Da die Bibliothek eine Abhängigkeit von der Hauptanwendung ist und nicht umgekehrt, bin ich mir nicht sicher, wie ich die MainActivity von meinem SplashScreenActivity starten soll. Es ist nicht so einfach wie:

Intent i = new intent(this, MainActivity.class); 
startActivity(i); 

Antwort

2

I SplashScreenActivity von Ihrem Haupt Manifest entfernen würde und eine protected Methode startMainActivity() oder gleich genannt erstellen. Rufen Sie diese Methode in Ihrer SplashScreenActivity Basisklasse an einer Stelle auf, an der Sie normalerweise Ihre MainActivity starten möchten.

Dann innerhalb Ihres Hauptprojekts würde ich SplashScreenActivity Unterklasse und überschreiben die startMainActivity() Methode, um ein Verhalten, das Sie wünschen durchzuführen. Vergessen Sie nicht, Ihre SplashScreenActivity Unterklasse in das Manifest Ihres Hauptprojekts aufzunehmen.

Auf diese Weise können Sie das Verhalten von SplashScreenActivity problemlos in all Ihren Projekten wiederverwenden, die davon abhängen könnten.

+0

Zur Klarstellung, ich entferne die SplashScreenActivity von meinem MODUL Manifest? Dann erstelle ich eine Splash-Screen-Aktivität in meiner Haupt-App, die SplashScreenActivity erweitert? Dann gebe ich alle Verarbeitungsdaten ein, die normalerweise in der Startbildschirmaktivität innerhalb dieser 'startMainActivity()' Methode stattfinden würden. Von dort kann ich meine Haupttätigkeit beginnen. edit: und im Manifest meines Hauptprojekts ersetze ich die SplashScreenActivity aus dem Modul durch die Aktivität, die ich gerade in meinem Hauptprojekt erstellt habe? –

+0

Ja, das stimmt. Vergessen Sie nicht, die Methode 'startMainActivity()' innerhalb Ihrer Basis 'SplashScreenActivity' zu einem Zeitpunkt aufzurufen, an dem Sie normalerweise Ihre Aktivität starten würden. –

+1

In Ordnung, das war kein so schmerzhafter Weg, dies zu erreichen. Ich habe diese Lösung getestet und es funktioniert! –

0

Sie sollten es nicht so machen. Sie koppeln diese beiden Klassen stark (die Klasse, die die Aktivität von der lib startet und die zu ladende Aktivität.

Stattdessen - können Sie einen Broadcast-Empfang in der App einrichten, der ein Intent-Objekt empfängt und die Aktivität für startet Wenn Sie in Zukunft andere Aktivitäten oder Dienste aus der Ferne starten möchten, können Sie denselben Broadcast-Empfänger verwenden, um Anfragen von Ihrer lib zu akzeptieren. Sie müssen lediglich Daten zu den Intents hinzufügen Extras Sammlung, die die Aktivität zu öffnen (oder irgendeine andere Aufgabe natürlich).

Diese Lösung de-Paare Ihre lib und app, es ist besser, Architektur wize (meiner Meinung nach) enthält.

Viel Glück!

+0

Dies kann etwas unskalierbar werden, wenn Sie pro-App-Übergangsanimationen von der 'SplashScreenActivity' in die' MainActivity' Ihrer App möchten. Es beinhaltet auch das Registrieren eines solchen "BroadcastReceivers" innerhalb des Manifests, wobei IMO ein Overkill für dieses einfache Problem ist. –

+0

Es ist wirklich eine Frage der Meinung. Diese Lösung ist nicht komplex. es ist relativ einfach zu implementieren und hat seine Vorteile. Ich denke, h_k muss die Vor- und Nachteile abwägen. – FunkSoulBrother