2010-07-16 22 views
15

Im nella fase di concettualizzazione/progettazione della costruzione di un'app e ho colpito un po 'di intoppo. Essenzialmente stavo cercando un modo per incorporare un'attività nell'interfaccia utente di un altro simile a come TabHost/TabActivity. Ci sarebbe una finestra nella parte superiore dello schermo che conterrebbe l'altra attività, e sotto ci sarebbero pulsanti e controlli che sono indipendenti dall'attività sopra e dovrebbero essere sempre visibili. L'utente sarebbe in grado di navigare da un'attività all'altra nella finestra senza causare alcuna modifica ai controlli sottostanti.android: using ActivityGroup per incorporare le attività

Mentre esaminavo il problema, mi sono imbattuto in ActivityGroup, che sembrava sarebbe stato utile, ma come lo avrei implementato? Qualcuno ha esperienza con ActivityGroup o ha un'altra idea?

risposta

19

Sì, dovresti implementare un gruppo attività, che sarà il contenitore delle tue altre attività. Quando l'utente fa clic su uno dei pulsanti, otterrà un riferimento a LocalActivityManager e lo userà per avviare e incorporare l'attività interna. Qualcosa di simile a questo:

LocalActivityManager mgr = getLocalActivityManager(); 

Intent i = new Intent(this, SomeActivity.class); 

Window w = mgr.startActivity("unique_per_activity_string", i); 
View wd = w != null ? w.getDecorView() : null; 

if(wd != null) { 
    mSomeContainer.addView(wd); 
} 

nota, utilizzando questo metodo può essere abbastanza complicato, perché a meno che l'attenzione è appena a destra, premendo i pulsanti hardware (come il tasto menu) attiverà solo solo gli eventi sul ActivityGroup al posto del Attività interiore. Devi trovare un modo per focalizzare l'attività interiore dopo averlo aggiunto alla vista del contenitore, a quel punto il pari si verificherà nell'attività interna e si propagherà all'attività del contenitore.

Si può fare, l'ho fatto ... e funziona. È solo un po 'più complicato di quello che penso dovrebbe essere.

In ogni caso, ho ottenuto la maggior parte di queste informazioni, cercando in codice TabHost, che può essere trovato here

+0

oh grande stavo cercando il codice sorgente tabhost. questo sembra buono, ma è tutto molto nuovo per me. cura di dare qualche spiegazione su cosa stai facendo nel tuo esempio di codice? – mtmurdock

+1

la parte startActivity avvia appena l'attività senza visualizzarla sullo schermo. Quindi ottieni la vista che ha tutti i contenuti e la aggiunge a una vista che si trova all'interno del tuo gruppo di attività. LocalActivityManager gestisce tutto per te, come inviare onPause e onResume alle tue attività interne quando premi il tasto home e tale – synic

+0

ancora una cosa: cos'è questo oggetto "finestra" e come viene implementato? posso semplicemente mettere un tag '' nel layout dove voglio che vada e quindi assegnarlo nel codice? ps grazie, sei fantastico. – mtmurdock

Problemi correlati