2013-06-06 12 views
9

Sto provando a utilizzare il nuovo Cassetto di navigazione . Ho seguito le linee guida e sono riuscito a farlo funzionare con i nomi delle sezioni che cambiano titolo sull'elemento selezionato e così via. Ora sono bloccato perché non ho idea di come archiviare ciò che voglio fare dopo.modifica layout o attività del frammento (?) Utilizzando un cassetto di navigazione

Quando clicco su un elemento nel cassetto - casa, ad esempio -Voglio a me portare a una schermata in cui ho tutta la roba che ho creato in un particolare layout per la schermata specifica. Sono tutte cose statiche come TextViews e immagini, quindi non devo fare nulla con loro.

Devo creare un activity e un layout per ogni articolo sullo ListView del cassetto e (non so ancora) avviare l'attività in onItemSelected()? O posso fare qualcosa di simile a creare un frammento al volo ogni volta che si fa clic su un elemento nella ListView e dire qualcosa come

if(homeClicked){ //use home.xml as layout } 
if(contactClicked){ //use contact.xml as layout } 

EDIT

Come test ho messo in onItemClick() un metodo che passava nella posizione dell'array cliccato. Come test ho appena usato come:

if(position==2) { // this is "contact" in the list layout 
    setContentView(R.layout.contacts); 
} 

Funziona, ma ovviamente perdo il cassetto come la roba layout di contatti non è annidato nel DrawerLayout. Esiste un modo più elegante per raggiungere il mio obiettivo invece di utilizzare un setContentView() utilizzando setContentView(), modificando qualsiasi layout da nidificare in un DrawerLayout? (Io non so nemmeno se è possibile - probabilmente non è, in quanto vi sono uguali ID)

@Stefan editate questo come non c'è abbastanza spazio nel commento risposta

Grazie Stefan, l'esempio di Google è la cosa che mi rende più confuso. Sono sicuro che ci sia una piccola particella sui frammenti che probabilmente ho letto 10k volte ma il mio cervello si rifiuta di assimilare. Per quanto ho capito, nell'esempio di Google quando fai clic su un elemento nel cassetto, crea un nuovo frammento e fa sì che questo frammento sostituisca l'unica cosa che c'è oltre al ListView del cassetto nel layout xml dello MainActivity, che è un FrameLayout che occupa tutto lo spazio dello schermo. Quindi tutti i frammenti fanno visualizzare un pianeta ImageView così il codice dice al frammento di cambiare quell'immagine in base alla posizione dell'array ListView dell'elemento click.

risposta

5

Oke, molte domande iniziali qui combinate con una che è abbastanza nuova e indefinita.

Prima di tutto, si avvia una nuova attività semplicemente facendo;

this.startActivity(new Intent(this, ActivityClassName.class)); 

da qualsiasi attività (o frammento, un po 'alterata a 'questo' 'this.getActivity()'=)

Non importa se si utilizza Attività o frammenti, si avrà sempre a creare un classe e una vista xml appartenente. Puoi creare qualcosa di generico, ma il più delle volte non vuoi farlo.

Per quanto riguarda la domanda se è necessario avviare una nuova attività, o passare Frammenti dopo un clic sul cassetto, direi che è ancora difficile da dire.

In generale, è più semplice e il più 'come dovrebbe' iniziare solo una nuova attività. Come un'attività dovrebbe essere uguale a uno schermo visibile con possibilmente parti multiple (che potrebbero essere frammenti).

In pratica, tuttavia, si vedono sempre più applicazioni Google (Google Music, Play Store, nuova Gmail ..) che sembrano abbandonare questa idea e utilizzare 1 Attività che commuta costantemente Frammenti.

Tecnicamente questo tipo di posiziona l'attività nel ruolo Applicazione, che può portare ulteriori difficoltà. Visivamente, tuttavia, le transizioni sono molto più fluide in quanto, ad esempio, la barra di azione rimane la stessa e in questo modo è più l''ancora' a cui piace Google.

Sembra però, che sono il passaggio Frammenti nella loro esercitazione invece di iniziare attività, così forse si dovrebbe provare in questo modo e di essere sul bordo sanguinamento del 'nuovo modo di fare le cose' :)

http://developer.android.com/training/implementing-navigation/nav-drawer.html

+0

im nuovo per il sito quindi non so se la modifica di un commento ti informa in qualche modo, btw post principale modificato come spazio commento non è sufficiente – kandros

+0

L'esempio di google ri-utilizza lo stesso frammento con un argomento diverso per cambiare un imageView, ma allo stesso modo puoi semplicemente creare un'istruzione switch e fare in modo che il Frammento si sostituisca con un Frammento completamente nuovo che ha le sue viste e la sua logica. –

0

È davvero confuso, sono abbastanza sicuro che l'ingegnere di Android abbia perso qualcosa qui!

Ad esempio su iOS, è possibile avere più "UIViewController" sulle finestre e avere lo stesso menu (o UITabViewController) per tutte le applicazioni. Quello è un comportamento normale w/o 231 domande sul StackOverflow ^^

Ma su Android, vedo nessuno ha una soluzione pulita da utilizzare NavDrawer o Tab con Activies ;-(

ho intenzione di scegliere il singolo

Problemi correlati