Generierte EditText-Felder

  • Antworten:9
mr1000
  • Forum-Beiträge: 86

05.01.2021, 01:16:08 via Website

Guten Morgen zusammen,

ich habe mal ein paar fragen an euch.

Wenn ich mir Edittext-felder generieren möchte, kann ich das so machen?

final EditText[] etBetrag = new EditText[16];
final EditText[] etPreisKg = new EditText[16];
final EditText[] etGewicht = new EditText[16];


                etBetrag[i] = new EditText(getActivity());
                etGewicht[i] = new EditText(getActivity());
                etPreisKg[i] = new EditText(getActivity());

                etGewicht[i].setHint(R.string.Preiskg);
                etGewicht[i].setId((View.generateViewId()));
                etGewicht[i].setBackgroundResource(R.drawable.textviewborder);
                linearLayout.addView(etGewicht[i], layoutParams);

Ich habe mich mal eingelesen und viele Beispiele gesehen, die dass so gemacht haben.
Nur bin ich mir nicht so sicher ob das so geht, weil zwei Werte an die SingleTon-Klasse übergeben werden.
Damit ich die Edittex-Felder außerhalb der For-Schleife benutzen kann, speichere ich die
Variable "i" in eine Liste

//Hier wird die Zählervariable ausgegeben,damit mehrere Listener erstellt werden können

                        for (int h = 0; h < lastValueFromI.size(); h++) {


                            //Hier werden die ausgewählten Items ausgegeben

                            for (int k = 0; k < lastValue.size(); k++) {





      switch               
      (spinner[lastValueFromI.get(h)].getItemAtPosition(lastValue.get(k)).toString()) {




  case "Schrott,Stanzabfälle":


singleTonClass.setSchrottPreisKg(etPreisKg[h].getText().toString());
singleTonClass.setSchrottGewicht(etGewicht[h].getText().toString());
singleTonClass.setSchrottBetrag(etBetrag[h].getText().toString());


        break;

Gruß,

Mr1000

Kommentieren
Jokel
  • Forum-Beiträge: 1.530

05.01.2021, 08:30:26 via Website

Hallo
Was willst du uns jetzt damit eigentlich sagen und was ist deine eigentliche Frage?

Damit ich die Edittex-Felder außerhalb der For-Schleife benutzen kann, speichere ich die
Variable "i" in eine Liste

Wenn die Edittexte Variablen (array) Klassenvariablen sind kannst du in der gesamten Kasse darauf zugreifen.
In deiner Singleton Klasse wird nur der Innhalt der Edittexte Variablen gespeichert, also das was du eingeben hast. Nicht die Variable selber.
Was soll das den Offset "i" in eine Liste zuspeichen?

Vorteil der Singleton ist du kannst in einer anderen Klasse mit Hilfe der Instanz auf die Inhalte zugreifen.

Wo was ist jetzt hier dein Problem?

— geändert am 05.01.2021, 08:58:37

Hilfreich?
Kommentieren
mr1000
  • Forum-Beiträge: 86

05.01.2021, 10:08:29 via App

Guten Morgen Jokel,

Bei mir werden über Singleton zwei Werte übermittelt anstatt einen.

Wenn man mehrere Werte über die Singleton-Klasse weitergibt kann man die über eine For-Schleife auslesen, nur sollte bei mir nur ein Wert sein.

Nun habe ich gemerkt, dass die dynamische Edittext-Felder daran schuld sind.

Sobald ich sechs Edittext-Felder habe,
Werden die Werte vom etPreiskg in einen einzige Array der Singleton-Klasse gespeichert obwohl so das nicht sein soll.

Hier ist ein Foto von dem Ergebnis :
https://ibb.co/xHr26qC

— geändert am 05.01.2021, 10:11:42

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

05.01.2021, 10:17:25 via Website

Wenn man mehrere Werte über die Singleton-Klasse weitergibt kann man die über eine For-Schleife auslesen, nur sollte bei mir nur ein Wert sein.

Dann zeige deien Klasse.
Wo wie willst du was auslesen?

Was ist in dem Bild falsch?
Ja das sind die selben werte.
Wie speicherst du die werte und wie host du sie wider raus?
Wie kommst du überhaupt zu dem Bild das scheint mir Exel zu sein.

Werden die Werte vom etPreiskg in einen einzige Array der Singleton-Klasse gespeichert obwohl so das nicht sein soll.

genau das machst du aber du hast scheinbar garkein Array in deinen Singleton.

singleTonClass.setSchrottPreisKg(etPreisKg[h].getText().toString());

Du übergibst einen Wert aber ich sehe nicht das du irgendwie auf einen Offset in der Singleton Bezug nimmst.

— geändert am 05.01.2021, 10:33:28

Hilfreich?
Kommentieren
mr1000
  • Forum-Beiträge: 86

05.01.2021, 18:22:29 via Website

Hallo Jokel,

Die Singleton-Klasse sieht so aus:

  public ArrayList<String> getSchrottPreisKg() {
    Log.d(SINGLETON, String.valueOf(schrottPreisKg));

    return schrottPreisKg;
}

public void setSchrottPreisKg(String st) {
    schrottPreisKg.add(st);

}


public ArrayList<String> getSchrottGewicht(){
    return SchrottGewicht;
}

public void setSchrottGewicht(String st) {
    SchrottGewicht.add(st);
}

public ArrayList<String> getSchrottBetrag(){
    return SchrottBetrag;
}

public void setSchrottBetrag(String st) {
    SchrottBetrag.add(st);
}

Am Ende lese ich die instance mit einer Forschleife aus.
Die Tabelle lasse ich mir in Java (itextpdf) generieren.

— geändert am 05.01.2021, 18:24:12

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

05.01.2021, 19:22:08 via Website

Werden die Werte vom etPreiskg in einen einzige Array der Singleton-Klasse gespeichert obwohl so das nicht sein soll.

Du sprichst von einen Array (Feld) in deinem Signleton wo du die Werte hältst speicherst.
Das was du hier hast ist eine ArrayListe ( dynamische Liste ) und kein statisches Array wie du es zB. in deinem Fargment benutzt.
Die Methode setSchrotgewicht erstellt bei jedem Aufruf einen neuen ListenEintrag.
Es werden mehrere sein wenn du sie öffters aufrufst.
Du wirst sie bestimmt , Falsch zurück lesen.

Am Ende lese ich die instance mit einer Forschleife aus.

Von was für einer Instance reden wir hier? Welche Forschleife?
Ich glaube wir haben hier einige Schwierigkeiten bei den Begrifflichkeiten.

Ich denke es ist besser und einfacher für dich wenn du in deiner Singelton Klasse auch ein Array benutzt und nicht eine Liste.
String[] getSchrottGewicht = new String[16];
Dann kannst du den gleichen Offset benutzen zum schreiben und lesen. Natürlich musst du da einiges umbauen. Auch die Methoden verändern.
Du Kommst scheinbar mit echten Listen nicht klar die Funktion eines Array scheinst du besser verstanden zu haben.

Wo und wie genau liest du deine Liste aus ? Zeige das da wirst du den Fehler haben.

Die Tabelle lasse ich mir in Java (itextpdf) generieren.

Und hier wirst du es auch wieder falsch auslesen, und bekommst eine falsche Anzeige.

— geändert am 05.01.2021, 19:42:46

Hilfreich?
Kommentieren
mr1000
  • Forum-Beiträge: 86

05.01.2021, 19:41:56 via Website

Hallo Jokel,

Sorry dass ich die Arraylist mit einen Array verwechselt habe :(

Ich lese die Liste am Ende so aus:

    for (int i = 0; i < singleTonClass.getEMotorBetrag().size() ; i++){

        Log.d(message, singleTonClass.getEMotorBetrag().get(i));
    }

— geändert am 05.01.2021, 19:43:08

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

05.01.2021, 19:53:23 via Website

Wenn das so ist stimmt bei deinem speichen was nicht.

Aber das ist nicht das erstellen des PDF
Nur ein Log.
Und was steht in dem log.

Hilfreich?
Kommentieren
mr1000
  • Forum-Beiträge: 86

05.01.2021, 20:09:41 via Website

Hallo Jokel,

Übergeben wird mir von singleTonClass.getSchrottBetrag() [3, 6] //Log

Mit der For-Schleife trenne ich die Werte von einandern, nur sollte eigentlich singleTonClass.getSchrottBetrag() nur ein Wert beinhalten und nicht zwei.

Ich habe bis jetzt so die Werte an die Tabelle übergeben.

//Der Body von der Tabelle
PdfPCell cell5 = new PdfPCell(new Paragraph(singleTonClass.getSchrottGewicht().toString().substring(1).replaceFirst("]", "")));
PdfPCell cell6 = new PdfPCell(new Paragraph("Schrott,Stanzabfälle"));
PdfPCell cell7 = new PdfPCell(new Paragraph((singleTonClass.getSchrottPreisKg().toString().substring(1).replaceFirst("]", ""))));
PdfPCell cell8 = new PdfPCell(new Paragraph(singleTonClass.getSchrottBetrag().toString().substring(1).replaceFirst("]", "")));

Was eigentlich so nicht gemacht wird, das weiß ich, da die Liste zu ein String konventiert wird :)

Nur verstehe ich nicht, wieso mehrere Wert übermittelt werden anstatt nur einen :(

Hier siehst du die gesamte Tabelle: https://hastebin.com/tajowapali.go

— geändert am 05.01.2021, 20:14:35

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

05.01.2021, 21:11:25 via Website

Wenn dir zwei Zeilen in in dem log ausgegeben werden.
Heißt es das da auch zwei Einträge sind.

Also rufst du irgendwo in deinen Code die Set Methode zweimal auf. Wo weißt nur du.

Setze einen Brackpoint auf die Methode und schaue wann oder wer die Methode aufruft.

Gehe deinen Code durch und schaue wo du diese Methode Verwendest. Wenn die Methode nur einmal in Code ist wirst du irgendeinen teil widerholt aufrufen (Schleife).

Können wir nicht sehen da wir nur Bruchstücke von deinem Code haben und somit keinen Zusammenhang Überblick haben.

— geändert am 06.01.2021, 12:19:58

Hilfreich?
Pascal P.
Kommentieren