2016-01-19 17 views
5

Sto costruendo il mio primo modulo libreria che sto pianificando di riempire con codice riutilizzabile per più progetti. Il mio primo roadblock è che devo essere in grado di avviare un'attività nell'app principale dal modulo della libreria.Avviare un'attività nell'app principale da un modulo Libreria Android

Ad esempio, ho un'attività splash screen. Funziona per 2 secondi, quindi avvia l'attività principale. Credo di poter riutilizzare questa attività dello splash screen e voglio inserirla nel mio modulo di libreria. Tuttavia, non sono sicuro di come avviare l'attività principale dalla libreria.

Mainfest nel setup applicazione principale:

<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> 

Il manifesto lancia la schermata di avvio, che attualmente risiede nel mio modulo di libreria.

Poiché la libreria è una dipendenza dell'applicazione principale e non il contrario, non sono sicuro di come avviare il lancio di MainActivity dal mio SplashScreenActivity. Non è così facile come:

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

risposta

2

avrei rimuovere SplashScreenActivity dal vostro manifesto principale e creare un metodo chiamato protectedstartMainActivity() o simili. Chiama questo metodo all'interno della tua classe base SplashScreenActivity in un punto in cui normalmente desideri avviare il tuo MainActivity.

Quindi all'interno del progetto principale eseguirei la sottoclasse SplashScreenActivity e sovrascrivi il metodo startMainActivity() per eseguire un comportamento che desideri. Non dimenticare di mettere la sottoclasse SplashScreenActivity all'interno del file manifest del tuo progetto principale.

In questo modo è possibile riutilizzare facilmente il comportamento di SplashScreenActivity in tutti i progetti che potrebbero dipendere da esso.

+0

Per chiarimenti, sto rimuovendo SplashScreenActivity dal manifest di MODULE? Quindi creo un'attività splash screen nella mia app principale che estende SplashScreenActivity? Quindi inserisco tutti i dati di elaborazione che normalmente si verifichino nell'attività della schermata iniziale all'interno del metodo 'startMainActivity()'. Da lì, posso avviare la mia attività principale. modifica: e nel manifest del mio progetto principale, sostituisco SplashScreenActivity dal modulo con l'attività che ho appena creato nel mio progetto principale? –

+0

Sì, è vero. Non dimenticare di invocare il metodo 'startMainActivity()' all'interno della tua base 'SplashScreenActivity' al momento in cui normalmente avvii la tua attività. –

+1

Va bene, non era un modo così doloroso per realizzare questo. Ho provato questa soluzione e funziona! –

0

Non dovresti farlo in quel modo. Si stanno fortemente accoppiando queste due classi (la classe che inizia l'attività dalla lib e l'attività da caricare

Invece - è possibile impostare una ricezione di trasmissione nell'app che riceverà un oggetto intent e avviare l'attività per Se, in futuro, vorrai che altre attività o servizi vengano avviati in remoto, sarai in grado di utilizzare lo stesso ricevitore broadcast per accettare richieste dalla tua lib, tutto ciò che devi fare è aggiungere dati all'Intent extra raccolta che conterrà la cui attività per aprire (o qualsiasi altro incarico, naturalmente).

Questa soluzione de-coppie vostro lib e app, è meglio l'architettura wize (a mio parere).

Buona fortuna!

+0

Questo può diventare un po 'non scalabile se si desidera avere animazioni di transizione per app da 'SplashScreenActivity' alla' MainActivity' dell'app. Implica anche la registrazione di tale "BroadcastReceiver" all'interno del Manifesto che IMO è eccessivo per questo semplice problema. –

+0

È davvero una questione di opinione. Questa soluzione non è complessa. è relativamente semplice da implementare e ha i suoi benefici. Immagino che h_k abbia bisogno di valutare i pro e i contro. – FunkSoulBrother