onClick verschachteln?

  • Antworten:7
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 34

21.05.2017, 23:10:51 via Website

Hallo zusammen
Ich stehe vor einem wahrscheinlich kleinen Problem, eine onClick-Anweisung zu verschachteln. Das Layout besteht aus einem TableLayout mit 10 Zeilen, einer numerischen TextView-Zeile und einem selbst konstruierten Keypad. Sinnbildlich ein Taschenrechner, der nicht rechnen kann, dessen eingegebene Zahl mit einem onClick einer Zeile der Table zugeordnet wird.
Eine TableLine besteht aus 3 Feldern:
Row0 > Ein Text für die Bezeichnung
Row1 > Ein Counter, der die Anzahl der Zuordnungen mitzählt
Row2 > Ein numerisches Feld, in dem der eingegebene Wert addiert wird.
Das alles ist realisiert und funktionsfähig.

Eine der Tasten im Keypad ist bezeichnet mit 'Line-Setup'. Die Funktion dieser Taste soll das Bearbeiten einer Zeilenbezeichnung auslösen. Es gibt bestimmt viele einfache Lösungen, möchte aber folgende Vorgehensweise realisieren:
Ein onClick auf die Taste 'Line-Setup' soll auf einen weiteren onClick auf eine der TableLines warten. Bei der Auswahl einer Zeile öffnet sich ein AlertDialog, mit dem ich entweder eine neue Bezeichnung eingebe oder den Inhalt der Zeile lösche. Soweit ist alles realisiert, bis eben auf dies verschachtelte onClick-Methode.
Wer weiss Rat, wie man das möglichst einfach umsetzen kann?

Erwarte gespannt eure Lösungsvorschläge. :)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

22.05.2017, 09:35:19 via App

Mit verschachtelten inClicks wird das kaum gehen.

Ich würde beim ersten klick eine Variabke setzen und diese bein zweiten auswerten und verarbeiten.

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

Antworten
  • Forum-Beiträge: 34

22.05.2017, 10:58:38 via Website

Das würde also bedeuten, dass ich für die Abfrage am besten eine Lösung mit 2 unabhängigen onClickListner realisieren muss.... Dann müsste ich wohl oder übel eine Abfrage für jede TableRow und beim Click auf Line-Setup eine zweite unabhängige auf das erste TextView jeder Zeile schreiben. Im Normalfall soll ja die ganze Zeile auf den Click reagieren. Zum Ändern der Bezeichnung reicht eigentlich ein Click auf das erste Feld, soll aber nur dann ansprechen, wenn es erforderlich ist.
Könnte gehen, wenn ich im Listner für die Zeile eine if(Line-Setup) {dann ändern} else {normal mit weiteren if{} und for{} verarbeiten} benutze.
Hoffentlich wird das nicht zu unübersichtlich, da ich bei einem 'normalen' Click den Counter von String zu int umwandeln muss, um 1 addieren zu können. Der Wert ist eine float-Variable die ich aus dem Eingabe-String konvertiere, auf 3 Nachkommastellen begrenzen und einen doppelten Dezimalpunkt verhindern muss. Dann addieren, in der Line wieder alles als Text ausgeben und die aktualisierte Zeile in einer Datei speichern...
Mir tropft bei diesen Gedankengängen schon der Schweiss auf die Tastatur. :)

Wenn ich bei dieser Aufabe am Verzweifeln sein sollte, schrei ich um Hilfe.

Antworten
  • Forum-Beiträge: 2.901

22.05.2017, 11:11:01 via Website

Hallo Urs,

richtig , arbeite mit Status-Boolean Flags.
Das ist allemal übersichtlicher, als Verschachtelung

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

Antworten
  • Forum-Beiträge: 34

22.05.2017, 23:38:48 via Website

android studio treibt mit mir psycho-spielchen. :O

beim starten der app (AVD und S7) wird das layout aufgebaut. das design ist perfekt für meine vorstellungen. eingeben von werten, inklusive aller wenn und aber überwachung, arbeitet genau so, wie ich es der app beigebracht habe. selbst das befüllen meiner tablerows mit initial-daten ist ok.
aber... sobald ich den bis zu diesem punkt einwandfreien programmcode um ein snipet erweitere, egal was ich damit anstellen will, startet die app nicht mehr. trotz mehrfachem step-by-step debugging und unzähligen Log-ausgaben habe ich nichts finden können, das wie ein fehler aussieht. sobald ich irgendwo auch nur 3 zeilen hinzufüge, die noch nicht einmal etwas bewirken müssen, wird die anzeige nicht mehr aufgebaut. bin am verzweifeln.... :'(

Antworten
  • Forum-Beiträge: 2.901

22.05.2017, 23:43:59 via Website

Hallo Urs,

mach mal bitte ein Clean und danach ein Rebuild.

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

Antworten
  • Forum-Beiträge: 34

23.05.2017, 02:15:12 via Website

soweit war ich schon, jedoch erfolglos.

durch einen zufall bin ich jetzt aber auf etwas merkwürdiges geraten:

für das feld2 ist ein zähler als 'int' deklariert. beim auslesen dieses wertes übergibt mir der InputStreamReader jedoch den inhalt als string. einfaches problem, einfache lösung. android bietet dafür eine einfache anweisung an, dachte ich.

int counter0 = Integer.parseInt(counterInput);

leider kann android genau damit nicht umgehen. nochmal das selbe problem habe ich mit feld 3. ein wert mit 3 nachkomastellen kann man ebenfallls mit einer einfachen anweisung umwandeln, dachte ich.

float totalWert0 = Float.parseFloat(wertInput);

beim parsen dieser beiden werte macht meine app einen abgang und weigert sich weiter ihren dienst zu verrichten. alles fluchen und drohen hat nicht gewirkt, die app bleibt stur. ich muss mir also für diese beiden anweisungen einen anderen weg suchen, um aus den strings werte zu erstellen, die sich addieren lassen. ein kleiner gedankenanstoss in welche richtung ich da fündig werden könnte, wäre nett. :)

— geändert am 23.05.2017, 02:18:41

Antworten
  • Forum-Beiträge: 34

23.05.2017, 05:52:31 via Website

Auch ein blindes Korn findet mal ein Huhn oder so ähnlich...

Die Realisierung meiner Line-Setup mit boolean lässt sich auf diesem Weg einfacher bewerkstelligen, als ich gedacht habe. Das war schon mal ein guter Tipp, danke.

Mein Parser-Problem ist auch gelöst. Mit Float.valueOf(String) geht das einwandfrei, auch in die andere Richtung.

Würde sagen, dass ich hier mal 'nen Haken setze. Liegt gerade nichts mehr neues an. :)

Antworten

Empfohlene Artikel