5

Obwohl ich seit Jahren mit Android arbeite, ist dies das erste Mal, dass ich Fragments in einem realen Projekt verwende. Also ich bin ein bisschen verwirrt :-PIst dies eine korrekte Verwendung von Android Fragmenten und NavigationDrawer?

Diese App hat eine NavigationDrawer mit 4 Hauptabschnitten. Ich verwende nur einen Haupt Activity mit einem Layout, der einen Inhalt View hat, den ich durch Fragments ersetze. Wenn eine Option in NavigationDrawer ausgewählt ist, instanziiere ich eine Fragment und lege sie in diesen Inhalt View. Ich tue so etwas wie dieses:

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); 
} 

Mehr Fragments geschoben innerhalb jeder der Haupt NavigationDrawerFragments. So hat jeder der Hauptbildschirme mehrere Unterbildschirme wie unten gezeigt.

Drawer __ Fragment 1.0 -- Fragment 1.1 -- Fragment 1.2 
     |__ Fragment 2.0 -- Fragment 2.1 -- Fragment 2.2 

Ich bin drängen jene innere Fragments aus den vorherigen FragmentActionBar Menüs wie folgt aus:

FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     OrderCreateFragment fragment = new OrderCreateFragment(); 
     fragmentTransaction.add(R.id.content_frame, fragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 

ich einige Probleme bin vor und deshalb habe ich für einige Ratschläge zu diesem Ansatz suchen:

  1. Ich weiß nicht einmal, wie man die ActionBar Menüpunkte richtig verwaltet. Jeder Fragment hat seine eigene Menüs und manchmal sind sie in der Bar stecken (dh. Wenn Fragments Schalten Sie auf die NavigationDrawer Klopfen statt mit dem Android zurück Schlüssel zurück)
  2. StackBack sollte vollständig sein geknallt, wenn einer der NavigationDrawer Optionen auswählen . Ich vermute, dass meine ActionBar unordentlichen Artikel damit verwandt sind, weil die Fragments irgendwie im Stapel gehalten werden.

So kann jemand bitte freundlich beraten, ob dies ein richtiger Ansatz ist, und wie die Probleme zu lösen mit den StackBack und den ActionBar?

UPDATE: Sieht aus wie das Löschen des gesamten Stapels auf der Methode selectItem löste die 2 Hauptprobleme. Trotzdem bin ich daran interessiert, Meinungen zu diesem Ansatz zu hören.

Antwort

0

Nun, ich denke, der beste Weg hängt von den Anforderungen der Anwendung ab. Betrachtet 2 Szenarien

A-App hat Anforderung für navigationdrawer & mehrere Aktivitäten mit verschachtelten/tiefe Navigation. Dann ist der beste Ansatz, eine Basisaktivität zu haben, die ein framelayout und eine navigation drawer hat. Alle Aktivitäten erweitern/erbt von dieser Basisaktivität. Und für jede Aktivität das entsprechende Layout aufblasen und programmatisch zum Rahmenlayout-Container von baseActivity hinzufügen.
Die Backstack-Navigation ist einfacher.

B - App hat Anforderung für navigationdrawer & nur einstufige Navigation. Dann kann man das Konzept des dynamischen Hinzufügens und Ersetzens der Fragmente auf einer einzelnen Aktivität verwenden, die eine Navigationsschublade hat.

0

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

Dies ist das Tutorial ich Schubladen Navigation lernen verwendet. Fand es ziemlich nützlich. Es geht durch den Prozess des Einrichtens der Schublade, Verknüpfen mit Symbolen und Hochladen von Fragmenten auf die Seite.

+0

Dies ist das gleiche Tutorial, dem ich tatsächlich gefolgt bin. Während es für das einfache Beispiel, das sie zeigen, gut funktioniert, denke ich, dass es ein falscher Ansatz für größere Projekte ist (dh 1 Aktivität und alle Fragmente werden von dort hinzugefügt/ersetzt und haben mehrere Ebenen in jeder der Navigationsschubladenoptionen) . Ich würde diesem Beispiel nie wieder folgen, du kannst dir nicht vorstellen, wie viele Probleme und heikle Workarounds ich machen musste, damit die App richtig funktioniert :-( – momo

Verwandte Themen