ListView gruppieren nach Kategorien

  • Antworten:3
Elmar E.
  • Forum-Beiträge: 7

16.03.2017, 10:39:37 via Website

Hallo zusammen, ich bin gerade dabei für ein Uni Appprojekt eine TestApp zu schreiben welche u.a. eine ListView ausgibt.

Diese ListView wird initial mit Werten befüllt. Mein Aufgabe war es nun diese ListView zu erweitern durch einen Dialog den ich auch so weit fertig habe.

Zur Erklärung ein paar Bilder:
1. Ausgangsscreen
image
Unten erkennt ihr die initiale ListView. Diese wird durch folgenden Code erstellt:

// TAGS
    ArrayList<String> carTags = new ArrayList<String>();
    carTags.add("c-class");
    carTags.add("b-class");

    ArrayList<String> brandTags = new ArrayList<String>();
    brandTags.add("amg");
    brandTags.add("mercedes");

    ArrayList<String> userId = new ArrayList<String>();
    userId.add("EMEA\\USERID");

    // CATEGORY
    BASECategory cars = new BASECategory("carclass", carTags);
    BASECategory brands = new BASECategory("brand", brandTags);
    BASECategory user = new BASECategory("user", userId);

    ArrayList<BASECategory> baseCategories = new ArrayList<BASECategory>();
    baseCategories.add(cars);
    baseCategories.add(brands);
    baseCategories.add(user);

2.Dialog öffnen und füllen
User uploaded photo
Nun öffne ich das Dialogfenster und fülle es.User uploaded photo
3. Das Ergebnis sieht dann so aus:
User uploaded photo

Und da ist das Problem. Wenn ich nun eine bereits bestehende Kategorie habe, möchte ich gerne das dies im bestehenden Array angehängt wird. Ist das den irgendwie möglich?
Zudem wäre es vielleicht noch ganz schön, dass wenn es tatsächlich eine noch nicht bestehende
Kategorie ist, dass es dann eine neue Zeile macht. Ich denke das lässt sich durch eine if-Verzweigung lösen. So gesehen brauche ich nur einen Denkanstoß zum Thema: Wie hänge ich den neuen Tag an das bestehende Array?!

Falls ihr das komisch programmiert findet, dann liegt es daran das keinerlei Rücksicht auf Performance und Security gelegt wird, weil dies nur eine "Show" App sein soll. Aber über jeden Tipp bin ich froh :)

Danke schonmal.

Antworten
swa00
  • Forum-Beiträge: 3.704

16.03.2017, 12:27:41 via Website

Hallo Elmar,

nimm es mir nicht übel , aber so ganz habe ich noch nicht verstanden, was du genau
für ein Problem hast :-)

Ich versuche es trotzdem einmal :

Wenn ich nun eine bereits bestehende Kategorie habe, möchte ich gerne das dies im bestehenden Array angehängt wird

Ich verstehe nicht ganz , was du damit meinst . Du arbeitest doch schon mit Arraylist und add.
was hindert dich daran nochmals ein add auszuführen ?

Falls du aber im Grunde genommen nach einer Lösung suchst , wie man den ListView "aktualisiert", dann
kannst du dir einen CustomAdapter- basierend auf BaseAdapter bauen und diesen nach jeder Änderung mit
notifyDataChange aktualisieren.

P.S. Anstatt ListView sollte man ggf eher einen RecycleView verwenden

— geändert am 16.03.2017, 12:28:57

Liebe Grüße - Stefan
[ App - Entwicklung ]

Elmar E.

Antworten
Elmar E.
  • Forum-Beiträge: 7

16.03.2017, 13:02:47 via Website

@swa00: hej danke für deine Antwort. Die ArrayList habe ich nicht programmiert und da ich noch relativ neu im Android App Developement bin habe ich nicht so ganz verstanden ob das so funktioniert wie du das eben sagtest. Habe es eben auch ncoh nciht wirklich hinbekommen. Deshalb als Zusatz, dass ich über jeden Tipp dankbar bin. Ich werde mal das ein oder andere weiterhin ausprobiern und mir auch mal RecycleView anschauen. Ich halte dich/euch auf dem Laufenden.
Grüße

edit:

swa00

Hallo Elmar,

nimm es mir nicht übel , aber so ganz habe ich noch nicht verstanden, was du genau
für ein Problem hast :-)

alles in allem kann man wohl sagen, dass meine Unerfahrenheit das größte Problem darstellt :)

— geändert am 16.03.2017, 13:23:20

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

16.03.2017, 19:55:44 via Website

Naja möglich ist es, allerdings musst du dann viel mehr dynamisch machen wenn es eine saubere Lösung werden soll.

Zuerst mal der mehr oder weniger Quick&Dirty Denkanstoß:

du weißt welche Kategorien du hast, d.h. du kannst per if prüfen was in dem Feld steht und dann in die entsprechende Liste adden, dies passiert dann bei der Auswertung des Dialogs:
bsp.

if(myTextEdit.getText.toString().EqualsEgnoreCase("brand")){
brandTags.add(myTagEdit.getText().toString());

}
else if(....) // hier weitere Categorien prüfen

Dies sollte für den anfang hierfür reichen, allerdings kommst du schnell ein deine Grenzen, wenn du keine fest im Code vordefinierten Kategorien hast. Zudem würde der Code bei zu vielen Kategorien einfach zu unübersichtlich werden...

Um das aber komplett Dynamisch umzusetzen, bräuchtest du eine Liste der Kategorien als Hauptdatenquelle.
z.b. so:

HashMap<string,BASECategory> ...

dein Key der String ist der Kategorienname, dann kannst du prüfen ob es die Kategorie gibt, wenn ja fügst du den Eitnrag der ArrayList im BASECategory objekt hinzu. Wenn es die Kategorie noch nicht gibt, kannst du eine neue darüber relativ einfach anlegen :)

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

Antworten