Android Allgemeine Frage zum Händeln mehrerer EditTextfelder

kaoZ

Top Contributor
Aloha ,

ich habe mal wieder eine kleine (mehr oder weniger) frage zum händeln von mehreren EditText Feldern, und zwar ist es glaube ich am einfachsten ich erkläre es anhand der Grafik die ich vorbereitet habe,

das hier habe ich letztendlich vor :



prinzipiell würde ich gern nen tip oder ne richtung haben wie ich es schaffe EditTextfelder die ich erzeuge in irgend einer art zusammenzufassen um diese dann später auszurechnen und in einer datenbank zu hinterlegen , bzw. werte aus diesen feldern , mein problem ist das ich je nach bedarf felder hinzufügen oder löschen können möchte und nicht weiss inwiefern man das realisieren kann :)

jemand ne idee, dachte da an eine ArrayList, aber wie genau verklickere ich meinen EditTextfeldern denen ich ja eine Id zuweisen muss , wo sie erzeugt werden sollen ??!!
Die Arraylist behandelt ja nur die Werte aus den EditTextfeldern, und nicht die Felder selber :bahnhof:

vielleicht kann mir ja jemand nen schubs in die Richtige Richtung geben :idea:

Das eintragen in eine Datenbank ist erstmal nebensache, dafür muss erstmal das gerüst stehen ^^

schonmal danke im vorraus :)
 

Tecwan

Aktives Mitglied
Was du vorhast, nennt sich Serialisierung (serialize).
Dabei werden Objekte in eine speicherbare Form überführt, dh. für die Objekte der betreffenden Klasse
wird festgelegt, wodurch diese Objekte und ihre Zustände vollständig beschrieben werden können.
Java (auch Android) bietet hierfür auch das Werkzeug an:
Serializable | Android Developers

Du kannst sowas aber auch selber machen (je nach gewünschtem Aufwand, Wiederverwertbarkeit usw.)
Wenn es nur um die Speicherung der Inhalte von EditText geht, bieten sich beispielsweise
Preferences als sehr einfache Form einer 'Datenbank' an.

Hier mal etwas Code zur Erzeugung und Bevölkerung eines Spinners mit einer Liste im onCreate()
der MainActivity - das sind zwar jetzt nur Strings, die dem Spinner = Dropdown-Menü angefügt
werden, aber als Schubs sollte es reichen :D:
Java:
final List<String> listL=new ArrayList<String>();
listL.add("auswählen");
listL.add("Inhalt1");
listL.add("Inhalt2");

final LinearLayout ll=(LinearLayout) findViewById(R.id.ll);	//schon mit id deklariert (xml)
		
final Spinner spinnerL=new Spinner(MainActivity.this);

final ArrayAdapter<String> adpL= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listL);
adpL.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerL.setAdapter(adpL);

ll.addView(spinnerL);

spinnerL.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
        // Beim Start wird der erste Eintrag automatisch gesetzt (und onItemSelected ausgeführt)
        if (!listL.get(position).equals("auswählen")) {
	        // zB. den Text listL.get(position) in deinen EditText schreiben
        }
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {}
});
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
ich habe gestern mal noch ein wenig rumprobiert, und stecke leider dabei fest per buttonklick 3 editText felder in einem Linearen layout in ein Scrollview einzufügen

zzt versuche ich es so zu lösen:

Java:
public class Test implements OnClickListener
{
  private int creator;
  private Button btnPlus;
  private ScrollView scrollView;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.test_layout);
		
  btnPlus = (Button)findViewById(R.id.Button_BtnPlus);
  btnPlus.setOnClickListener(this);
		
  scrollView = (ScrollView)findViewById(R.id.test_ScrollView);

@Override
public void onClick(View v) 
{
	
LinearLayout lL;

if(btnPlus.isPressed())
{
  creator++;
}
if(creator == 1)
{
  lL = new LinearLayout(this);
  scrollView.addView(lL);         // Erstellt im ScrollView ein Child Element (Lineares Layout )
  lL.addView(**??**);                     // Hier liegt mein erstes Probelm !
}
if(creator >= 2)
{
  lL.addView(**??**);      // Hier liegt mein 2tes Probelm !
}
}
}

an den mit den Fragezeichen makierten Stellen möchte ich es nun irgendwie realisieren das mir in das beim ersten klick bereits erstellte Lineare Layout, 3 EditText felder hintereinander eingefügt werden, welche beim erstellen jeweils eine id zugewiesen bekommen, das problem ist wenn ich folgendes mache :
Java:
EditText a = new EditText(this):
EditText b = new EditText(this);
EditText c = new EditText(this);
lL.addView(a);
lL.addView(b);
lL.addView(c);

funktioniert es zwar ( einmal , da er sonst eine Exception wirft da die referenzen a,b,c ja nach dem ersten klick bereits existieren würden), ich steuere eine Lösung an in dem ich vielleicht ab dem 2ten ButtonKlick ein (evtl. in einer externen klasse vordefiniertes),Lineares Layout inclusive der der 3 EditText felder ( mit ggf. vorformatierten parametern (z.B weigth)) einfügen kann.

Frage , ist sowas realisierbar, und wenn ja wie ( costum components ?? ) ich habe schon etwas rumprobiert aber bin nie zu einer lösung gekommen, und vorallem wie kann ich dann meinem " Tabellen schnipsel " beibringen wie es auszusehen hat ? ( xml ? / extra layout? ) . hat jemand ne Idee ?:bahnhof:
 
Zuletzt bearbeitet:

Tecwan

Aktives Mitglied
Bei meinem Spinner habe ich das LinearLayout benutzt, um die Liste mit den Einträgen (nur Text)
aufzunehmen. Bei dir sind es halt EditTexts, die du in das LinearLayout eines ScollViews (anstelle
eines Spinners, in den keine EditText sollen) packen möchtest.

Also ScollView erzeugen, und da das vorher erzeugte LinearLayout rein:
Code:
scrollView.addView(lL);
Die Deklaration sollte außerhalb der Methoden erfolgen, damit sie nicht nur lokal sichtbar sind.

Und dann, beim Klick auf den Button, fügst du die neuen EditTexts dynamisch hinzu.
Dabei gibst du auch an, worauf diese dann reagieren sollen. In diesem Beispiel ihrerseits auf Klicks:

Java:
@Override
public void onClick(View v) {
    if(btnPlus.isPressed()) {
	EditText edt = new EditText(this);	
        final int index = ++creator;	
        edt.setOnClickListener(new View.OnClickListener() {             
	        @Override
	        public void onClick(View v) {
		        machWasMitDem(index);	
	        }
	    });
        lL.addView(edt);
    }  
}

Soweit das Prinzip. Natürlich kannst du auch jeweils mehrere Views (Button, Infotext und EditText)
in einen Container (zB. Linear Layout) packen, und diesen dann hinzufügen, das liegt ganz bei dir.

Wie du siehst, brauchst du den EditText's keine id's hinzufügen, da du alles, was diese machen sollen,
bereits bei ihrer Deklaration mitgibst; index sagt dir trotzdem, in welchem der später neu erzeugten
EditTexten etwas passiert ist.
 

kaoZ

Top Contributor
das hilft mir schonmal weiter, danke , nun noch eine frage, besteht die möglichkeit , z.B das lineareLayout welches zum schluss die 3 EditText felder enthalten soll , die ja eine bestimmte position in dem linearenlayout haben sollen , als einzelnes "desing element" zu speichern und einfach dieses element dann per Buttonklick derm Scroll view hinzuzufügen ?

evtl in einer seperaten klasse die LinearLayout erweitert und dann auf eine xml datei zugreift um das layout für beides zu setzen LinearLayout und EditText felder

hoffe ich hab es halbwegs verständlich versucht zu erklären was ich versuchen möchte ^^:toll:


noch eine Frage am Rande :

wenn ich wie in deinem Beispiel per onClick einen EditText erstelle

Java:
EditText edt = new EditText(this);
und diesen button dann ein zweites mal klicke , gibt es da nicht probleme weil die Referenz für das EditText Element , in dem fall edt ja bereits existiert ??

beim versuch das zu realisieren schmierte meine app sonst immer ab ?!???:L
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Grundgedanke dahinter ist das ich nicht von vornherein einschränken will wieviele "design elemente" ( Lineare Layouts incl. 3 EditText feldern ) erzeugt werden, ist es denn möglich ggf. die Referenz des ersten editText feldes ggf. mit einer for schleife zu erweitern ?

Oder für jeden klick auf den Button gleichzeitig eine neue Referenz für die einzelnen EditText felder zu erzeugen , um ein werfen einer Exception zu vermeiden insofern eine referenz schon existiert ?

also sprich Referenzen ( z.b EditText edt = new EditText(this), dynamisch zu erweitern, über einen String in einer for schleifen oder ähnliches ???

???:L
 

Tecwan

Aktives Mitglied
Jedes Mal, wenn du den Button klickst, wird
- index hochgezählt
- ein neues EditText mitsamt Listener erzeugt.

Jedes Mal!, und jedes Mal mit neuem Index. Aus diesem Grunde muss index als final deklariert werden.
Wenn dann der jedesmal zusätzlich erzeugte OnClickListener auf einen Klick reagiert,
liefert er (Objekt!) den index, den er bei seiner Erstellung inne gehabt hat, mit.

Die Referenz zu edt wird in dem Beispiel nicht mitgeliefert, du brauchst sie eigentlich auch nicht,
sie bleibt anonym.

Natürlich kannst du aber eine Objektreferenz auf deine EditTexte weiterreichen, wenn du möchtest:
Code:
machWasMitDem(v, index);
wobei v der View des EditTextes ist, auf den du geklickt hast.
Code:
EditText edt37 = (EditText)v;
liefert dir dann eine Referenz, falls du sie brauchst.
Oder du benutzt etwas wie
Code:
inhalt[index] = v.getText().toString();

Und bei der Erzeugung kannst du selbstverständlich auch eine Schleife verwenden (zB. mit einem zweiten Index versehen).
 

kaoZ

Top Contributor
Ich habe jetzt rumprobiert , ich habe es hinbekommen das mir 3 EditTexte mit eigenem Listener erzeugt werden ( brauch ich die zwingend ?? ) allerdings ist das immernoch nicht genau das auf was ich hinauswill ich hab nochmal eine grafik gebastelt und evtl zu verdeutlichen worauf ich hinaus möchte :

hoffe es ist jetzt etwas übersichtlicher :)



es soll am ende auch genau so aussehen ( xml für die container = möglich ?? ) , wenn ich es so mache ohne jedes mal ein neues lineares layout zu erstellen packt er mir die EditTextfelder einfach stumpf nebeneinander bis diese rechts aus dem bild wandern.

wenn ich jedes mal bei onClick versuche ein neues Lineares Layout zu erstellen kackt die app ab, ich hab nur kein plan warum :bahnhof:

im moment schaut das leider eher so aus :

 
Zuletzt bearbeitet:

Tecwan

Aktives Mitglied
Die Listener brauchst du natürlich nur dann, wenn du direkt auf Reaktionen reagieren möchtest,
etwa um die Eingabe auf unerlaubte Zeichen etc. zu überprüfen.

Es gibt für das LinearLayout zwei Ausrichtungen: horizontal (die Felder kommen nebeneinander)
und vertikal (übereinander). Das kannst du bei der Erzeugung natürlich einstellen.
In deinem Fall hättest du dann ein vertikales LinearLayout
Code:
parentVerticalLinearLayout
in
deinem ScrollView (in der XML:
Code:
android:orientation="horizontal"
), in das du dann jeden
Klick ein weiteres horizontales LinearLayout mit drei nebeneinander angeordneten EditTexten packst:

Java:
LinearLayout oneLL = new LinearLayout(mContext);
oneLL.setId(++zeile);

EditText edt1 = new EditText(mContext);
EditText edt2 = new EditText(mContext);
EditText edt3 = new EditText(mContext);
edt1.setId(1);    // Id für den View des EditTextes
edt2.setId(2);
edt3.setId(3);
// Parameter der EditText oder des LinearLayouts mit .setLayoutParams(...)

oneLL.addView(edt1);
oneLL.addView(edt2);
oneLL.addView(edt3);

parentVerticalLinearLayout.addView(oneLL);


Die Id's sind für den
Code:
findViewById
Zugriff auf die Views und müssen nicht einzigartig sein; du must nur
sicherstellen, dass du in der richtigen Hierarche (zeile) danach schaust.

Zu meiner Schande muss ich gestehen, dass ich xml's nie anfasse, aber ich bin sicher, dass
du anstelle der Einstellungen im Code (
Code:
// Parameter...
) auch ein vorgefertigtes xml nehmen kannst.
 

kaoZ

Top Contributor
Hab es mal ebend schnell probiert , ohne neue layoutParameter zu setzen , es schmiert nicht ab, allerdings passiert nach dem ersten klick auch nix mehr :

ich habe mal für jedes erstellte EditText einen eigenen Index erstellt der dann mit hochlaufen soll, so kann ich diese evtl am schluss in 3 arraylisten sammeln und auslesen lassen zum zusammenrechnen.

aber warum passiert nach dem ersten klick nichts mehr ? mal abgesehen von den noch fehlenden layout parametern oder der xml ?!

Java:
public class Test {

  private int zeile = 0;
  private int indexA = 0;
  private int indexB = 0;
  private int indexC = 0;

public void onCreate(...)
{
.... // restliche code und findViewByIds ......

lL = new LinearLayout(this);
		
scrollView.addView(lL);
}
@Override
	public void onClick(View v) {
	
		if(btnPlus.isPressed())
		{		
			LinearLayout oneLL = new LinearLayout(this);
			oneLL.setId(++zeile);
			 
			EditText edt1 = new EditText(this);
			EditText edt2 = new EditText(this);
			EditText edt3 = new EditText(this);
			edt1.setId(++indexA);   
			edt2.setId(++indexB);
			edt3.setId(++indexC);
		
			 // oneLL.setLayoutParams(new LayoutParams());
			 
			oneLL.addView(edt1);
			oneLL.addView(edt2);
			oneLL.addView(edt3);
			 
			lL.addView(oneLL);
		
		} 
	
	}
}
 
Zuletzt bearbeitet:

Tecwan

Aktives Mitglied
Nimm mal den ScrollView komplett raus, der darf nur ein direktes Child haben.
Das lL reicht völlig, das kann man auch als vertikal Scrollbar deklarieren.

Im grafischen Editor (oder der xml) setzt du oben die beiden Buttons + und -, an den unteren Rand
den zum Berechnen. Und in den Bereich dazwischen ein LinearLayout (vertical).

Dann sieht die Klasse so aus:
Java:
public class MainActivity extends Activity {

	private int zeile;
	
	LinearLayout lL;
	Button btnPlus;
	Button btnMinus;
	Button btnCalc;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
        zeile = 0;

		lL = (LinearLayout)findViewById(R.id.lL);
		btnPlus = (Button)findViewById(R.id.btnPlus);
		btnMinus = (Button)findViewById(R.id.btnMinus);
		btnCalc = (Button)findViewById(R.id.btnCalc);
		
		btnPlus.setOnClickListener(new View.OnClickListener() {             
		    @Override
		    public void onClick(View v) {
		    	addSet();		
		    }
		});
		
		btnMinus.setOnClickListener(new View.OnClickListener() {             
		    @Override
		    public void onClick(View v) {
		    	removeSet();		
		    }
		});		
	}
	
	public void addSet() {
		LinearLayout oneLL = new LinearLayout(this);
        oneLL.setId(++zeile);         
        EditText edt1 = new EditText(this);
        EditText edt2 = new EditText(this);
        EditText edt3 = new EditText(this);
        edt1.setId(zeile);  
        edt2.setId(zeile);
        edt3.setId(zeile);
        oneLL.addView(edt1);
        oneLL.addView(edt2);
        oneLL.addView(edt3);         
        lL.addView(oneLL);	
	}
	
	public void removeSet() {
		View v = findViewById(zeile);
		if (!(v==null)) {
			lL.removeView(v);
			zeile--;
		}			
	}

}

Du hast da übrigens noch einen Denkfehler drin gehabt, der spätestens beim Rechnen zutage tritt:
Deine EditTexte haben alle die gleiche Id, da helfen auch indexA..C nichts, weil deren Wert immer
identisch ist.

Einfache Abhilfe:
Java:
edt1.setId(1000+zeile);
edt2.setId(2000+zeile);
edt3.setId(3000+zeile);
Dann bekommst du die einzelnen Views durch
Code:
i+1000
(2000, 3000) in einer Schleife
mit i von 1 bis zeile.
Z.B. zum Speichern:
Java:
	public void speichern() {
		String matrix = "";
		for (int i=1; i<=zeile; i++) {
			EditText edt1 = (EditText)findViewById(1000+i);
	        EditText edt2 = (EditText)findViewById(2000+i);
	        EditText edt3 = (EditText)findViewById(3000+i);			
			matrix += edt1.getText().toString() +"|"+ edt2.getText().toString() +"|"+edt3.getText().toString()+"\n";
		}
		System.out.println(matrix);
	}
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Also, ich habe es ausprobiert, hinzufügen und entfernen der Edittext felder funktioniert bestens ( DAfür an dieser Stelle schonmal fettes Danke:toll: ), ABER

das Lineare layout lässt sicht ohne scrollView nicht scrollen ,

ich google schon die ganze zeit aber finde nur lösungen mit scrollView,

sobald ich aber ein ScrollView adde und mein "wrapper"(das lineare layout welches nachher die items enthält) adde kackt die app schon beim versuch die Activity aufzurufen ab .......

Das klappt nicht :
Java:
...

ScrollView scroll;
LinearLayout wrapper;


protected void onCreate(...)
{
....
scroll = (ScrollView)findviewById(R.id.scrollView);

wrapper = (LinearLayout)findViewById(R.id.wrapper);

scroll.addView(wrapper);

ist es ausserdem möglich der neu erzeugten tabelle mit den editText feldern eine xml zuzuweisen und wenn ja wie sieht es im Code aus ?


oder muss ich alles über .setLayoutParams()...... regeln ?
und wie realisiere ich es über die darüber das die 3 editText auch wirklich fill_parent, bzw den wrapper ausfüllen und nicht so klein nebeneinander stehen / oder sich überlagern .
 

Tecwan

Aktives Mitglied
Ein ScrollView (wie übrigens auch ein ListView) kann nur ein einziges Layout aufnehmen.

Aber ok, nochmal mit ScollView.
Da wir keine Layouts schachteln dürfen, brauchen wir ein passendes: das TableLayout.

Also zurück in den Editor, alles außer den Buttons raus und folgendes rein in die xml:

[XML]
<ScrollView
android:id="@+id/scrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/btnCalc"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@id/btnPlus"
android:scrollbars="vertical" >

<TableLayout
android:id="@+id/tableLayout"
android:stretchColumns="*" //sorgt anfänglich für gleiche Größe aller Reihen
android:layout_width="match_parent"
android:layout_height="match_parent" >
</TableLayout>
</ScrollView>[/XML]

Und dann in Java:
Java:
public class MainActivity extends Activity {

	private int zeile = 0;
	
	TableLayout tableLayout;
	Button btnPlus;
	Button btnMinus;
	Button btnCalc;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		tableLayout = (TableLayout)findViewById(R.id.tableLayout);
		btnPlus = (Button)findViewById(R.id.btnPlus);
		btnMinus = (Button)findViewById(R.id.btnMinus);
		btnCalc = (Button)findViewById(R.id.btnCalc);
		
		
		btnPlus.setOnClickListener(new View.OnClickListener() {             
		    @Override
		    public void onClick(View v) {
		    	addSet();		
		    }
		});
		
		btnMinus.setOnClickListener(new View.OnClickListener() {             
		    @Override
		    public void onClick(View v) {
		    	removeSet();		
		    }
		});
		
		btnCalc.setOnClickListener(new View.OnClickListener() {             
		    @Override
		    public void onClick(View v) {
		    	speichern();		
		    }
		});
		
	}

	
	public void addSet() {
		TableRow atr = new TableRow(this);
//		atr.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)));
        atr.setId(++zeile);         
        EditText edt1 = new EditText(this);
        EditText edt2 = new EditText(this);
        EditText edt3 = new EditText(this);
        edt1.setId(1000+zeile);  
        edt2.setId(2000+zeile);
        edt3.setId(3000+zeile);
        atr.addView(edt1);
        atr.addView(edt2);
        atr.addView(edt3);         
        tableLayout.addView(atr);	
	}
	
	public void removeSet() {
		View v = findViewById(zeile);
		if (!(v==null)) {
			tableLayout.removeView(v);
			zeile--;
		}			
	}
	
	public void speichern() {
		String matrix = "";
		for (int i=1; i<=zeile; i++) {
			EditText edt1 = (EditText)findViewById(1000+i);
	        EditText edt2 = (EditText)findViewById(2000+i);
	        EditText edt3 = (EditText)findViewById(3000+i);			
			matrix += edt1.getText().toString() +"|"+ edt2.getText().toString() +"|"+edt3.getText().toString()+"\n";
		}
		System.out.println(matrix);
	}	

}
 

kaoZ

Top Contributor
ich habe den code mal umgeschrieben auf ein layout mit scrollView und als Child element das TableLayout ich glaube in deinem Quelltext fehlt noch :
Java:
......

scrollView = (ScrollView)findViewById(R.id.ScrollView);
wrapper = (TableLayout)findViewById(R.id.Wrapper);
		
scrollView.addView(wrapper);
.....
oder ?

wenn ich das versuche zu starten stürzt die ab wieder beim aufrufen der Activity ab
und ohne stürzt die app beim aufrufen der Methode ab , ich hab kein plan warum ....

Die Views werden Deklariert und zugewiesen,normal sollte die onCreate Methode sich doch so ausführen lassen können oder ? fügt den ScrollView und das Child element hinzu , ohne Rows..... keine ahnung warum das an der stellen nicht klappt

[EDIT]
ah ich sehe grad das TableLayout ist deklariert aber der ScrollView nicht , ist das evtl der Grund ? muss ich die View da nicht zuweisen ?[/EDIT]

[EDIT]Alles Klar , so funktioniert es :) :idea:[/EDIT]
 
Zuletzt bearbeitet:

Tecwan

Aktives Mitglied
Jup, ich hab in das Relative Layout zwei Buttons gesetzt (bzw. unten noch den dritten), dann
einen ScrollView hinzugefügt und da dann ein TableLayout reingesteckt.
Alles mit ID versehen.

Und dann werden jeweils nur noch TableRows hinzugefügt.
 

kaoZ

Top Contributor
aber irgendwie schon komisch , ich hab alles in einem Linearen Layout, sobald ich aber den ScrollView mit einbeziehe, sprich den View anhand der Id zuweise, funktioniert es nichtmehr, lass ich es weg , klappt alles ^^:toll:
 

kaoZ

Top Contributor
das einzige was jetzt noch fehlt ist eine methode um auszulesen wieviele editTextfelder erzeugt wurden und daraus dann die werte zu holen um mit ihnen zu rechnen, ich werde mal ein wenig rumprobieren :rtfm:

Danke nochmal für deine Hilfe , ich lass den thread nochmal offen falls ich wieder den wald vor lauter bäumen nicht finde ^^
 

kaoZ

Top Contributor
nur nochmal zum Veständniss , die schleife läuft alle ids ( i<=index) von edt1, 2,3 usw ab und speichert die ausgelesenen eingaben in dem String ergebnis oder ?
Java:
public void calculate() 
	{
			String ergebnis=""; 
// erstellt leeren String mit Referenz "ergebnis"
			
			for(int i=1; i<=index; i++)   
/* for schleife für index = (i) | i=1 weil ja mindestens 1 editText erstellt worden ist 
aber warum dann i "<=" kleiner oder gleich index ?*/

			{
				EditText edt1 = (EditText)findViewById(1000 + i); 
//sucht editText felder mit der id 1000+i(index) und speichert diese in edt1
				Ergebnis += edt1.getText().toString(); 
/* holt sich die eingaben der einzelnen editText felder und konvertiert diese in einen String, durch "+=" werden diese Strings dem noch leeren String (ergebnis) hinzugefügt
			}
			txtViewErgebnis.setText(ergebnis); 
// setzt den Text des TextViews auf den Wert aus ergebnis
	}

im aktuellen stand fügt mir die schleife die werte nur zusammen ,

sprich 12 aus "1001" / 23 aus edt "1002"

bedeutet ich bekomme folgende ausgabe :

1223

ich würde aber gerne das er mir die felder gleich zusammenrechnet unabhängig davon wieviele felder es sind, ich probiere weiter ^^:rtfm:

müsste ich dann nicht anstelle eines Strings , erstmal ein int deklarieren und die werte darüber zusammenrechnen lassen , und zur weiteren bearbeitung dann in einen String konvertieren ?? :)
 

Tecwan

Aktives Mitglied
aber warum dann i "<=" kleiner oder gleich index

Die neue Zeile mit ++zeile erzeugt, fängt also mit 1 an. D.h., in der n. Zeile hat zeile den Wert n.
Um alle n Zeilen zu erwischen, muss ich also bis n hochzählen, und nicht von 0 bis n-1.
Das ist nur eine Designfrage, eigentlich würde man wie in Java bei Arrays üblich bei 0 beginnen.
Das spielt hier aber keine Rolle, denn wir haben kein Array.
Wollten wir die Zeilen von 0..n-1 indizieren, hätten wir zeile++ verwenden müssen und i<zeile.


Calculate macht natürlich nicht, was der Methodenname sagt, sondern sollte dir nur zeigen, wie du auf
die Editables der EditTexte zugreifen kannst.
Die Ausgabe macht übrigens sowas:
Code:
1|2|3 (Zeilenwechsel)
4|5|6 (Zeilenwechsel)
7|8|9 (Zeilenwechsel)


Um z.B. für Spalte x die Summe zu erhalten, machst du:
Java:
int summe = 0;
for (int i=1; i<=zeile; i++) {
    EditText edtx = (EditText)findViewById(x*1000 + i);
    int valx = Integer.getInt( edtx.getText().toString );    
    summe += valx;
}
System.out.println("Summe der "+x+". Spalte = "+summe);
Aber das gilt natürlich nur, wenn die Editable tatsächlich nur Inhalte vom Typ int enthält.
 

kaoZ

Top Contributor
ich habe die Ausgabe mittlerweile mit so gelöst , ich komme zumindest auf das Resultat auf welches ich kommen wollte, auch hier noch einmal danke :toll:

Java:
public void calculate()
{
double testErg=0;
double eins =0;
double testErgebnis=0;


for(int i=1; i<=index; i++)
		{
			EditText edt3 = (EditText)findViewById(3000 + i);
			String erg = edt3.getText().toString();
			eins = Double.parseDouble(erg); // noch ohne try/catch 
				
			ArrayList<Double> testList = new ArrayList<Double>();
			testList.add(eins);
				
			for ( double testErg : testList ) 
				{
					testErgebnis += testErg;
				}
		}
		
	txtTestErgebnis.setText("" + testErgebnis);
}

nun muss ich nurnoch die formatierung der edtiText felder realisieren, angenommen ich erzeuge einen style der auf diese editText felder angewendet werden soll, wie kann ich diesen in java ohne eine xml ausführen, ich habe gestern schonmal rumprobiert aber das hier ist nicht das was ich möchte :

Java:
edt1.setRawInputMethod(InputType.TYPE_CLASS_PHONE);
// Funktioniert zwar, aber es lassen sicht trotzdem andere zeichen als [0123456789.]eingeben

edt1.setInputMethod(InputType.TYPE_NUMBER_FLAG_DECIMAL);
// Das funktiniert irgendwie nicht , normalerweise dürfte ja eigentlich somit der InputType rein auf Nummer + Dezimalstellen gesetzt werden , eine eingabe von Text ist allerdings doch weiterhin möglich

ober würde an dieser stelle der vorher in diesem thread bereits erwähnte onClickListener für die EditText felder zum tragen kommen mit dem ich während der eingabe die zeichenkette auslese und ggf. per Toast eine Fehlermeldung ausgeben kann wenn jemand versucht andere zeichensätze hineinzuschreiben als den von mir gewünschten ?

ausserdem würde ich gerne eine feste breite für die erstellten EditTexte angeben, funktioniert das mit

Java:
edt1.setLayoutParams(LayoutParams.....??); // FILL_PARENT usw bringen mich hier ja nicht weit ich bräuchte eher 120dp oder vergleichbares

oder ist es möglich rein für die neu zu erzeugenden einen style (xml) anzulegen und diesen bei erstelllung zu setzen ? wie würde man das im javacode aussehen lassen ?
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
ich habe an dieser stelle mal sowas versucht

Java:
public void addItem()
{
TableRow row = new TableRow(this);
row.setId(++index);

EditText edt1 = new EditText(this, null, R.style.ItemStyle); 

// wenn ich diesen Code anwende (this, null, R.style.ItemStyle) erstellt er mir keine EditText felder mehr 
}

ist soetwas ohne inflater überhaupt möglich , und falls nein wie bringe ich meine erstellten editText felder in die form in die ich sie haben will ( bzw wie wende ich einen Inflater auf die EditText felder an ?

hier mal der auszug aus der xml :

[XML]
<!-- EditText ( Item ) -->

<style name="ItemStyle">
<item name="android:layout_width">120dp</item>
<item name="android:layout_height">42dp</item>
<item name="android:inputType">numberDecimal</item>
</style>
[/XML]
 

Tecwan

Aktives Mitglied
Probier mal
Java:
EditText edt = new EditText(this);
edt.setTextAppearance(this, android.R.style.ItemStyle);

D.h., dein Style 'ItemStyle' wird in der styles.xml deklariert, die durch die android.R eingebunden wird.

Aber welche Deklaration du speziell für EditText nehmen kannst, kann ich dir nicht sagen.
Du solltest allerdings bei deinem style noch angeben, wovon dieser erbt, und dann das ändern,
was vom geerbten style abweicht.

Also für einen normalen TextView etwas wie
[XML]<style name="MyText" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">20sp</item>
</style>[/XML]
 

kaoZ

Top Contributor
da ich die Tage nicht dazu gekommen bin das zu Testen werde ich gleich montag mal schauen ob es klappt und nochmal rückmeldung geben , aber schonmal vielen dank :)
 

kaoZ

Top Contributor
habe es nun endlich geschafft es mal auszuprobieren und muss leider sagen das es wie in deinem Beispiel nicht funktioniert , dabei muss es doch möglich sein einem neu erstelltem EditText einen Style hinzuzufügen und somit gleich festzulegen wie dieser sich verhält oder ?

zzt. löse ich es so :

Java:
EditText edt1 = new EditText(this);
edt1.setWidth(100); // funktioniert
edt1.setInputType(InputType.NUMBER_DECIMAL); // funktioniert

jedoch muss ich es dann für jedes erstellbare EditText einzeln festlegen und hätte lieber die lösung über einen Style , ich könnte es zwar auch über layoutParameters lösen , was allerdings die selbe lösung wäre wie oben beschrieben , noch jemand eine Idee ???
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Allgemeine frage bzg. Android Android & Cross-Platform Mobile Apps 10
thor_norsk Allgemeine Fragen Android & Cross-Platform Mobile Apps 21
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
W Mobiler Einkaufszettel - allgemeine Fragen Android & Cross-Platform Mobile Apps 25
J Der allgemeine Stand der Dinge Android & Cross-Platform Mobile Apps 4
M Frage zu OnClickListener. Verständnisproblem Android & Cross-Platform Mobile Apps 5
xXSkyWalkerXx1 Android Bluetooth LE - Frage zur Funktionalität Android & Cross-Platform Mobile Apps 26
M Frage zu setContentDescription Android & Cross-Platform Mobile Apps 2
G Google Play Store Design Frage Android & Cross-Platform Mobile Apps 2
Augenblau Android Frage zu den unterschiedlichen Menüarten Android & Cross-Platform Mobile Apps 0
S AsyncTask und doInBackground Frage Android & Cross-Platform Mobile Apps 2
L Android Generelle Frage zur Spieleprogrammierung unter Android Android & Cross-Platform Mobile Apps 2
H Frage bei erstellen eines Projectes Android & Cross-Platform Mobile Apps 3
G Wissen frage - wo am besten Speichern. Android & Cross-Platform Mobile Apps 1
B Android Verständnis frage zu Threads//AsyncTasks Android & Cross-Platform Mobile Apps 10
J Android ganz kurze frage Android & Cross-Platform Mobile Apps 2
K Android Frage zu Themes/Styles Android & Cross-Platform Mobile Apps 5
R Frage zu Widgets Android & Cross-Platform Mobile Apps 2
B Kurze Frage zu Play Store? Android & Cross-Platform Mobile Apps 2
U Android Kleine ImageButton Frage Android & Cross-Platform Mobile Apps 2
U Android Frage zu eigenen Adaptern Android & Cross-Platform Mobile Apps 2
U Android ListView Frage Android & Cross-Platform Mobile Apps 6
M Frage zu Java Programm für Windows Mobile 6.5 Android & Cross-Platform Mobile Apps 2
H FileConnection: Frage nach Dateisystem-Zugriff unterdrücken Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben