Android Sidebar/Navigation Drawer einmal implementieren und in alle Activities nutzen

  • Antworten:13
Ma Du
  • Forum-Beiträge: 7

03.11.2014, 23:17:50 via Website

Hallo zusammen, ich bin neu hier und programmiere seit einem halben Jahr Android, mit dem Adt in eclipse. Ich habe eine Frage zu der Sidebar in android. Ich habe eine solche Sidebar in meiner MainActivity implementiert und würde diese Sidebar jetzt gerne in allen Activities meiner App nutzen. Habe da schon einiges mit Vererbung USW ausprobiert, allerdings benötige ich zB in einer anderen Activity das Erben von ListView. Ich freue mich, falls jemand einen Rat weis... Vielen Dank im Voraus!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2014, 23:56:07 via App

Normalwrweise implementiert man die SideBar bzw. NavigationDrawer in einer Activity und macht den ganzen Rest mit Fragments die dann ausgetauscht werden etc.
Natürlich geht das auch in mehreren Activities nur ist es da etwas umständlicher.
Jede Activity muss als ParentLayout das NavDrawe Layout + Die NavDrawerView haben.
über eine selbst angefertigte Klasse die in jeder Activity aufgerufen werden kann wird dann der NavDrawer angezeigt und intialisert. Habe das selbst schon so gemacht. Ich würde dir Aber zu Fragments raten.
Wenn du einmal das komplett implementiert hast, hat man keine Lust seine halbe Logik umzustellen da spreche ich aus erfahrung...

Lg Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ma Du
  • Forum-Beiträge: 7

04.11.2014, 11:10:03 via Website

Vielen Dank für die schnelle Antwort. Das mit den Fragmente zur Laufzeit ändern habe ich bereits implementiert, allerdings ruckelt die App jetzt total da es in dem Navigation starrt ca 25 Einträge gibt, auf das reagiert werden muss... Hast du dahingehend einen Rat ?

Antworten
JustinTime
  • Forum-Beiträge: 21

04.11.2014, 13:02:13 via Website

Wie hast du das ganze denn implementiert? Ohne zu sehen was du getan hast kann man schwer Tipps zur Optimierung geben.

25 Einträge klingt mir unabhängig der Performance aber generell zu viel für einen Drawer der ja nur die Hauptfunktionen der App darstellen sollte.

Antworten
Ma Du
  • Forum-Beiträge: 7

04.11.2014, 21:41:27 via Website

Der Drawer ist mit einem ListView implementiert. Ich habe deinen Rat beherzigt und das ganze jetzt auf 10 Einträge gekürzt und habe mir überlegt, die Sidebar nur in der MainActivity zu nutzen... Das führt mich zu einer anderen Frage. Ich lese strings die ich dann in String Arrays Speicher aus einer sqlite Datenbank ein, diese Strings sind dann die Items von Spinnern... Soweit sogut allerdings werde manchmal 3 oder 4 oder 5... n String Arrays dynamisch erzeigt und befüllt... Wie kann ich dann zur Laufzeit n Spinner anlegen und befüllen und diesen Items dann Funktionen zuordnen ?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.11.2014, 21:45:22 via App

Meinst du eine Spinner anlegen oder einfsch nur ein Item zum Drawer hinzufügen?

Prinzipiell geht das 100% dynamisch nicht aber ansatzweise schon.
Du musst eine Liste machen mit Zuordnung id-Funktion.

Beim Dynamischen hinzufügen musst du dann nur die ejtsprechende ID wissen und alles passt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ma Du
  • Forum-Beiträge: 7

04.11.2014, 22:09:29 via Website

Wenn ich n String Arrays aus der Datenbank bekomme sollen n Spinner angelegt werden. Das schaffe ich in einer Liste... Aber wie ordne ich dann zB den items von Spinner 3 Funktionen zu? Weil im Layout gibt es ja nur einen Spinner mit entsprechender id... Mit setListView(Adapter); erzeuge ich die Liste, da ich von ListView erbe. Schätze ich muss dann irgendwie über den Adapter auf die Spinner zugreifen? Oder über die Liste selbst ?

Antworten
Ma Du
  • Forum-Beiträge: 7

05.11.2014, 18:03:24 via Website

Habe den Code gerade nicht zur Hand... Stell ich morgen mal hier rein. Aber es sieht so aus, dass es im Layout ja nur einen Spinner im meinem Fall mit der id Spinner1. Nun werden zur Laufzeit mit Hilfe das ListViews und dem dazugehören Adapter beispielsweise 8 Spinner erzeugt. Wie rufe ich nun die getSelectedItem-Methode des zB 7 Spinners auf. Der Spinner kann ja nur durch den 7 listeneintrag identifiziert werden, aber wie ?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2014, 18:52:25 via Website

Wenn ich mir deine Post so duchlese bin ich mir niocht ganz sicher ob du den Unterschied zwischen spinnern und ListViews kennst (http://stackoverflow.com/questions/20728920/what-is-the-difference-between-spinner-and-listview).

Ich würde es ansatzweise so machen ( am beispiel mit intents):

p

ublic bool handleItemClick(int pos)
{
switch(pos)
{
case 0: startActivity(new Intent(act1,act2)); return true;
case 1: startActivity(new Intent(act1,act3));return true;
case 2: startActivity(new Intent(act1,act4));return true;
case 3: startActivity(new Intent(act1,act5));return true;
case 4: startActivity(new Intent(act1,act6));return true;
case 5: startActivity(new Intent(act1,act7));return true;
case 6: startActivity(new Intent(act1,act8));return true;
case 7: startActivity(new Intent(act1,act9));return true;
}
return false;
}

so, falls sich die items nun auch noch in der Reihenfolge oder im Positions index unterscheiden/verändern können, hättest du mit dieser Methode ein Problem, da dann bei click plötzlich etwas anderes ausgeführt wird als erwartet.
Dals muss du die IDs in gewisser weise dynamisieren.

— geändert am 05.11.2014, 18:53:15

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ma Du
  • Forum-Beiträge: 7

05.11.2014, 19:32:11 via Website

Mir ist der Unterschied sehr wohl klar ;) ich erzeuge in der ListView in jeder Zeile einen Spinner, nämlich n Spinner.. Mal 5 mal 6 mal 7 USW und zwar zur Laufzeit indem ich 5 oder 6 oder 7 String arrays aus einer dB lese. diese Strings in den Arrays sind dann die Spinneritems. Wie komme ich jetzt an die Items von Spinner 3, da, wie schon vorher erwähnt, es im XML Layout ja nur EINEN Spinner gibt....?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2014, 19:45:22 via Website

Ah ok, jetzt verstanden..

Du musst auf die Childs der ListView zugreigen und dann dort die Spinner auslesen bzw. auf click reagieren.
Dann kannst du auch uf die Verschiedenen Items zugreifen.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ma Du
  • Forum-Beiträge: 7

05.11.2014, 21:12:51 via Website

Ahhh jetzt sprechen wir die gleiche Sprache :-) danke für die Hilfe, nur wie greif ich denn auf die Childs der ListView zu das find ich nicht heraus, zumindest in diesem Zusammenhang...

Antworten