Vorweg: für genau so etwas ist dieser Forumsbereich da.
Also dafür gibt es durchaus mehrere Möglichkeiten.
Die zentrale Frage ist, wie genau sich das alles verhalten soll. Wird die Liste nach Eingabe gefiltert? Oder nach Wert? Oder nach Anzahl der Werte? Willst Du das im Nachhinein aufsplitten wollen?
Nehmen wir beispielsweise folgende fiktive Bestellung: 4cl, 2cl, 1/3l, 5dl, 4cl, 2cl, 2cl, 2cl, 4cl
(Den Notruf wegen der Alkoholvergiftung lassen wir mal außer Acht, da der ja für euch kostenlos ist. ;))
(Zur Erklärung: 5dl = 1/2l = 0,5l = Hefeweizen, 1/3l = 0,33l = Bierchen, 2cl = Schnappes, 4cl = doppelter Schnappes)
Du hast jetzt mindestens zwei Möglichkeiten zur Ausgabe des Ganzen:
Zitat
1cl x 0 = 0,00€
2cl x 4 = 2,00€
4cl x 3 = 3,00€
1/3l x 1 = 2,50€
5dl x 1 = 3,00€
Hier hast Du einfach eine HashMap oder ein Dictionary oder sonstwas, welches sämtliche Deiner Tasten als keys hat.
Wann immer eine Taste gedrückt wird, addierst Du die bestellte Menge. Dein ListAdapter geht dann einfach die einzelnen Keys durch und baut sich die Anzeige zusammen.
Zitat
4cl x 3 = 3,00€
2cl x 4 = 2,00€
5dl x 1 = 3,00€
1/3l x 1 = 2,50€
Dies ist ein bisschen komplexer, dafür aber flexibler.
Zunächst einmal solltest Du Dir eine Zuordnung Name->Preis(->Menge) machen. Bei jeder Bestellung schaust Du nach, ob Du die zum Button gehörende Zuordnung Name->Preis schon hast. Falls ja, setzt Du die Anzahl um eins nach oben. Falls nein, fügst Du es Deinem Array hinzu.
Die Sortierung ergibt sich dann aus der Reihenfolge der (ersten) Bestellung jeder Mengeneinheit.
Wenn Du so richtig cool bist, baust Du Dir einen eigenen Array Controller für das Array und Deinen eigenen Objekttypen, der das Hinzufügen von Objekten gemäß Deiner Vorstellung umsetzt.
Dann brauchst Du nur arrayController.addDrinkNamed("2cl"); aufrufen, und die Methode schaut eigenständig, ob es diesen Wert schon gibt (Menge um 1 erhöhen) oder nicht (Wert ins Array packen).
Ist ein Super Übungsprojekt.
Berechnung kannst Du dann auch in den Controller packen. Im Prinzip eine einfache Schleife:
long result = 0;
for(Drink drink : drinksArray) {
result += drink.getAmount() * drink.getPrice();
}
return result/100;
Pro-Tipp: speichere auf jeden Fall die Einzelbeträge in Cent und rechne sie dann in Euro um.
(Oder Dollar oder wie auch immer. Auf jeden Fall die kleinste mögliche Einheit.)
Fließpunktzahlen haben die Eigenschaft, unglaublich große Wertebereiche darstellen zu können. Sie haben aber auch den Nebeneffekt, sehr ungenau zu werden.
Alles Weitere ist dann eine Frage des Datenmodells.
Du kannst beispielsweise für jeden Deiner Homies/Bros/wie auch immer das heutzutage heißt, einen eigenen fiktiven Account anlegen.
Beispielsweise mit Spitzname und Budget für den Abend.
Dann kannst Du das Ganze in einen Pager einbetten und die Liste wird dann für jeden einzeln angezeigt. Und da Du auch das Budget des Abends eingetragen hast, wird die Anzeige beispielsweise gelb, wenn er nur noch sagen wir 4€ hat und die Eingabe sperrt sich komplett, sobald er rechnerisch pleite ist.
Oh, man kann da soooo viel draus machen.