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 NavigationDrawer
Fragments
. 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 Fragment
ActionBar
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:
- Ich weiß nicht einmal, wie man die
ActionBar
Menüpunkte richtig verwaltet. JederFragment
hat seine eigene Menüs und manchmal sind sie in der Bar stecken (dh. WennFragments
Schalten Sie auf dieNavigationDrawer
Klopfen statt mit dem Android zurück Schlüssel zurück) StackBack
sollte vollständig sein geknallt, wenn einer derNavigationDrawer
Optionen auswählen . Ich vermute, dass meineActionBar
unordentlichen Artikel damit verwandt sind, weil dieFragments
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.
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