EditText-Felder an eine id binden

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

23.01.2021, 18:41:32 via Website

Hallo Leute, ich lasse mir EditText genieren,nur habe ich das problem dass mehrere EditText den gleichen Wert übernehmen.

Wie könnte ich das am besten lösen, so das jeder EditText sein eigenen Wert behält?

 //Die Arrays für die EditText-Felder
final EditText[] etBetrag = new EditText[16];
final EditText[] etPreisKg = new EditText[16];
final EditText[] etGewicht = new EditText[16];
 for (i = 0; i < NumberOfColumns; i++) {

                linearLayout = view.findViewById(R.id.linear);

                final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

                layoutParams.setMargins(0, 70, 0, 0);

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

                KundenInfobt = new Button(getActivity());

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, Metalle);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner[i].setId((view.getId()+i));
                spinner[i].setAdapter(adapter);
                linearLayout.addView(spinner[i], layoutParams);

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

                etPreisKg[i].setBackgroundResource(R.drawable.textviewborder);
                etPreisKg[i].setHint(R.string.Gewicht);
                etPreisKg[i].setId((view.getId()+i));
                linearLayout.addView(etPreisKg[i], layoutParams);

                etBetrag[i].setBackgroundResource(R.drawable.textviewborder);
                etBetrag[i].setHint(R.string.Betrag);
                etBetrag[i].setId((view.getId()+i));

                linearLayout.addView(etBetrag[i], layoutParams);


 KundenInfobt.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                     //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;


                                    case "E-Motore":

                                        singleTonClass.setEMotorPreisKg(etPreisKg[h].getText().toString());
                                        singleTonClass.setEMotorGewicht(etGewicht[h].getText().toString());
                                        singleTonClass.setEMotorBetrag(etBetrag[h].getText().toString());

Wie ich das sehe, liegt der Fehler daran, dass zwei oder mehr EditText-Felder die gleiche id zugewiesen bekommen und somit immer den gleichen Wert haben

Ich hoffe, ihr habt ein Tipp für mich!

Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.01.2021, 20:46:33 via Website

Hallo
Du erstellt einige Edittexte Ojekte dynamisch in einer for Schleife.
Eine id hast du ihnen nicht gegeben. So wie es in einem xml layout auch ist.

So wie du es machst bekommen die Objekte keine id.
Also kannst du sie auch nicht suchen.

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

23.01.2021, 20:48:14 via App

Hallo Jokel,

Ich habe doch mit eBetrag[].setId(); eine ID gesetzt, oder nicht?

Gruẞ,

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

23.01.2021, 20:54:13 via Website

Nein
Und wenn du das willst musst du es für jedes Objekt machen.

Mit

etBetrag[i].setId((view.getId()+i))

Erstellst du keine id sondern host dir die von dem view Objekt und addiert einfach den offset dazu.
Das wird nicht gehn. Die id muss einmalig sein also musst du das dynamisch auch dem System überlassen.

In etwa so
ViewCompat.generateViewId()

— geändert am 23.01.2021, 21:23:54

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

23.01.2021, 21:13:17 via App

Ah, ich verstehe!

Ich melde mich nochmal, wenn ich zu den Thema noch eine Fragen haben sollte.

Schönen Abend.

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2021, 11:19:22 via Website

Alernativ machst du das nicht über die ID, sondern hälst dir die View Objekte in einer Liste oder Dictionary

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

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

24.01.2021, 12:43:14 via Website

@pascal ob ihm das was hilft?

Er hatt ja ein array was er aber lokal in einer Methode erstellt. Und nicht als Instanz Klassenvariable.

Ich verstehe auch nicht was er mit der Id will was das soll.
Er will in dem onklicklistener die eingegeben Werte in seinen Singelton speichen, tut er scheinbar auch.

Wenn er wider auf die Werte zugreifen will braucht er die ja nur aus der Singelton auszulesen.
Da er dort es in einer arrayListe speichert hat er keinen richtigen Bezug zu den Daten. Da die Reihenfolge wie auf die vielen klicklistener geklickt wird der User bestimmt. Auf den Vorschlag auf beiten Seiten ein Array zubenutzen ist er nicht eingegangen. Scheinbar will er es jetzt über die Id lösen.

Wenn er die EditText Arrays als Klassen Variablen erstellt und erst in der for Schleife setzt kann er in der ganzen Klasse darauf zugreifen.

Das würde ihm hier auch schon mehrfach bei seinem vorherigen Themen gesagt.

Das scheint leider nicht richtig anzukommen deshalb habe ich mich auf das westliche beschenkt.

Hilfreich?
Pascal P.
Kommentieren