Sebbene lavorassi con Android da anni, questa è la prima volta che utilizzo Fragments
in un progetto di vita reale. Quindi sono un po 'confuso :-PSi tratta di un uso corretto di Android Fragments e NavigationDrawer?
Questa app ha uno NavigationDrawer
con 4 sezioni principali. Sto usando solo un main Activity
con un Layout
che ha un contenuto View
che sostituisco con Fragments
. Quando un'opzione nel NavigationDrawer
è selezionata, istanzio un Fragment
e lo inserisco in quel contenuto View
. Sto facendo qualcosa di simile:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
public static int drawerSelectedOption = 0;
private void selectItem(int position) {
drawerSelectedOption = position;
Fragment fragment = null;
switch (position) {
case 0:
fragment = new StoresFragment();
break;
case 1:
//promos
case 2:
fragment = new TransactionsFragment();
break;
case 3:
break;
case 4:
fragment = new Settings();
break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mSectionTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
Più Fragments
sono spinti all'interno di ciascuno dei principali NavigationDrawer
Fragments
. Quindi ognuna delle "schermate" principali ha diverse schermate secondarie all'interno, come mostrato di seguito.
Drawer __ Fragment 1.0 -- Fragment 1.1 -- Fragment 1.2
|__ Fragment 2.0 -- Fragment 2.1 -- Fragment 2.2
sto spingendo coloro interna Fragments
dai precedenti Fragment
ActionBar
menu simile a questo:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
OrderCreateFragment fragment = new OrderCreateFragment();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
sto affrontando diversi problemi ed è per questo sto cercando qualche consiglio su questo approccio:
- Non so nemmeno come gestire correttamente le voci del menu
ActionBar
. OgniFragment
ha i suoi propri menu ed a volte sono bloccati al bar (es. Se il passaggioFragments
toccando ilNavigationDrawer
invece di andare indietro con l'Android schiena chiave) StackBack
dovrebbe essere spuntato completamente quando si seleziona una delleNavigationDrawer
opzioni . Ho il sospetto che i miei oggetti disordinatiActionBar
siano correlati a questo perché loFragments
viene tenuto in pila in qualche modo.
Così, qualcuno può Vi preghiamo gentilmente di consiglio se questo è un approccio corretto e come affrontare i problemi con la StackBack
e il ActionBar
?
UPDATE: Sembra cancellare tutto lo stack sul metodo selectItem risolto i 2 problemi principali. Sebbene io sia ancora interessato ad ascoltare le opinioni su questo approccio.
Questo è lo stesso tutorial che ho effettivamente seguito. Mentre funziona bene per il semplice esempio che mostrano, penso che sia un approccio molto sbagliato per i progetti più grandi (cioè avere 1 attività e tutti i frammenti che vengono aggiunti/sostituiti da lì, e che hanno diversi livelli in ciascuna delle opzioni del cassetto di navigazione) . Non seguirò mai più quell'esempio, non puoi immaginare quanti problemi e soluzioni di hacking dovrei fare per far funzionare correttamente l'app :-( – momo