Liste in ListView unterschiedlich ausgeben

  • Hallo zusammen,


    ich habe in meiner App eine ArrayList voller <EntryGoal> Einträgen.
    Diese gebe ich in einer ListView aus und die Einträge werden so formatiert:


    Java
    public String toString() {
    	
    	return String.format("%d %s", minute, name);
    }


    Jetzt möchte ich in einer anderen Activity die gleiche Liste in einer anderen ListView ausgeben.
    Für diese andere ListView würde ich die Einträge auch gerne anders formatieren.
    Gibt es da eine Möglichkeit?


    Vielen Dank im Vorraus


    M3doXX

  • Hi M3doXX,


    ich kenn jetzt natürlich den Rest deiner Struktur nicht aber falls du noch keinen eigenen Adapter für deine ListView gebaut hast könntest du dies nachholen indem du eine Klasse von BaseAdapter erben lässt und gibst ihm im Konstruktor ein Flag mit. in der getView entscheidest du dann je nach Flag was zurück gegeben werden soll indem du ein anderes Zeilenlayout rein lädst oder da einfach direkt im code anders formatierst. Falls du da noch ein paar Codeschnipsel bräuchtest rühr dich einfach nochmal ;)


    Gruß,
    matze

  • Hi M3doXX,


    alles klar ;)


    Also ich mach das immer so:


    1. Bau ich mir ein listitem.xml, das im Ordner layout liegt, z.B.:



    Dann füge ich meiner View eine ListView hinzu, z.B.:


    In der onCreate der entsprechenden Activity mache ich dann

    Java
    MenuItemAdapter adapter = new MenuItemAdapter(this, actItem.getItems());
    		ListView lv = (ListView) findViewById(R.id.lstMenu);
    		lv.setOnItemClickListener(this);
    		lv.setAdapter(adapter);


    Wobei actItem.getItems() ein ArrayList<MenuItem> zurück gibt. Ein MenuItem ist einfach nur eine dumme Bean die ihren Titel hält.


    Das tatsächlich interessante für dich ist jetzt dieser MenuItemAdapter, dem du in deinem Fall noch den entsprechenden Typ mitgibst, z.B. einen boolean isListeA oder so.
    Der Adapter schaut dann so aus bei mir:



    wobei du im construktor dann noch einen boolean isListeA dabei hast damit du in der getView da wo ich

    Java
    MenuItem item = (MenuItem) getItem(position);
    		holder.getName().setText(item.getName());


    mache noch bisschen was formatierst. Oder aber du baust dir eben ein zweites listitem.xml und machst dann bei

    Java
    convertView = inflator.inflate(R.layout.listitem, parent, false);


    schon die Unterscheidung. Es ist gut möglich, dass du ähnliche schnipsel beim googeln findest, hab ich zum größten teil selbst mal wo entwendet :D



    So, hab ich dich jetzt noch etwas mehr verwirrt oder konnte ich dir erfolgreich helfen? ;)


    Gruß,
    matze

  • Also erstmal schonmal aller Besten Dank für deine Bemühungen.
    Aber wenn ich ehrlich bin hat mich das nur noch mehr verwirrt :D
    Ich will mal kurz meinen Code posten:


    Hier die Activity in der die Liste ausgegeben werden soll:



    Die .getAllEntriesGoal, sieht so aus:



    Und die Klasse in der die Einträge zum String formatiert werden ist diese:



    Und genau diese toString() Methode am Schluss formatiert den String so, wie er nachher in der ListView ausgegeben wird.
    Nun will ich in 2 verschiedenen Activitys andere Strings verwenden.
    Eine Idee wie ich das vielleicht etwas einfacher umsetzten kann?
    Besten Dank!!!
    Gruß


    M3doXX

  • Hi,


    naja, ich bin da vll. etwas zu tief drin mit den ganzen ListViews. Hab schon paar gebaut und ist eigentlich nurnoch Copy&Paste und paar Sachen anpassen, also routine ;)


    Du könntest mit meiner Variante alles so lassen wie es jetzt ist bis auf den ArrayAdapter der ein BaseAdapter werden müsste. Du bräuchtest vermutlich nichtmal 2 Layouts die einer Zeile entsprechen, du willst ja offenbar nur den String itself anders formatieren. Da würdest du dann einfach in der getView, in der du deine Bean EntryGoal ja in der Hand hältst nicht mit .toString() in die TextView hängen sondern eine andere Methode aufrufen, die einen anders formatierten String zurück gibt.


    - Eine Klasse erstellen, die von BaseAdapter erbt und sich an meinem MenuItemAdapter orientiert
    - Im Konstruktor gibst du einen boolean mit, anhand von dem du unterscheiden kannst, welche Formatierung du denn überhaupt brauchst.
    - in der getView baust du einen if-Block if (flag) .toString methode aufrufen else .toString2() aufrufen
    - den Return wert in die TextView werfen, die du in der xml datei definiert hast (listitem)


    wars eigentlich.


    Gruß,
    matze

  • Also, ganz verstanden habe ich das immer noch nicht :-[
    Ich brauche also eine toString2() Methode, das hab ich verstanden.
    Aber wie genau und vor allem wo wird die Unterscheidung getroffen ob ich nun toString() oder toString2() benutzen möchte?
    Eine getView Methode habe ich nämlich gar nicht ?!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!