5

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 NavigationDrawerFragments. 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 FragmentActionBar 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:

  1. Non so nemmeno come gestire correttamente le voci del menu ActionBar. Ogni Fragment ha i suoi propri menu ed a volte sono bloccati al bar (es. Se il passaggio Fragments toccando il NavigationDrawer invece di andare indietro con l'Android schiena chiave)
  2. StackBack dovrebbe essere spuntato completamente quando si seleziona una delle NavigationDrawer opzioni . Ho il sospetto che i miei oggetti disordinati ActionBar siano correlati a questo perché lo Fragments 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.

risposta

0

Bene, secondo me il modo migliore dipende dalle esigenze dell'applicazione. Considerando 2 scenari

A-App ha requisito per il dispositivo di spostamento & attività multiple con navigazione nidificata/profonda. Quindi l'approccio migliore è avere un'attività di base che abbia un framelayout e un navigationdrawer. Tutte le attività si estendono/ereditano da questa attività di base. E per ogni attività gonfiare il rispettivo layout e aggiungere a framelayout il contenitore di baseActivity a livello di programmazione.
La navigazione dello stack posteriore è più semplice.

B - L'app ha il requisito per il dispositivo di spostamento & solo navigazione a livello singolo. Quindi si può usare il concetto di aggiungere e sostituire dinamicamente i frammenti su una singola attività che ha un cassetto di navigazione.

0

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

Questo è il tutorial che ho usato per imparare i cassetti di navigazione. Trovato abbastanza utile. Passa attraverso il processo di impostazione del cassetto, collegandolo alle icone e caricando i frammenti sulla pagina.

+0

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

Problemi correlati