Auswahl aus mehreren Edittext-Feldern

  • 6 Antworten
  • Letztes Antwortdatum
L

likedue

Ambitioniertes Mitglied
1
Hey Leute,

ich habe ein mehr oder minder logisches Problem.

Ich habe eine Activity mit 20 Edittexten.

Jetzt möchte ich aber nur fünf Inhalte von diesen 20 übernehmen.
also wenn ich etwa in den Feldern 2,5,7,8,10,14,16 Inhalte habe, möchte ich lediglich die ersten fünf übernehmen.
was mit dem Rest geschieht ist einerlei.

wie sammle ich aus 20 Strings die ersten fünf?
also ich will nicht 1-5 sondern in den Feldern, in denen etwas steht nehme ich an, die restlichen ignoriere ich.

ich habe schon die komplette Architektur und die Funktionen zum einlesen, zuweisen zu Strings (a1-a20) etc...

mir fehlt lediglich der schritt zum aussortieren.

Ich hoffe, dass Ihr mir weiterhelfen könnt.

Vielen Dank
Chris
 
Nimm doch einfach ne Zählvariable die immer um eins erhöht wird, wenn ein String in einem der Felder vorgefunden wird. Du scheinst ja schon ne Art Loop zu haben, der alle Felder durchgeht. Dann machste um den Loop nen einfaches if, das prüft ob die zählvariable schon 5 ist.

if(zählvariable < 5){
if(edittext.getText().length() > 0) {
kopiere text
zählvariable ++
}
}
 
Ich habe jetzt mal ein Schnipsel um zu zeigen, was ich meine:

Code:
  if(alter1b.isChecked()==true)
  {
      a15=altertxt1b.getText().toString();
      String hilf;
      hilf=a15.replace...
      a15 = ("http://www."+hilf+".de/");

   }
   else
  {
      a15="";
  }
    		   
  if(alter2b.isChecked()==true)
  {
      a16=altertxt2b.getText().toString();
      String hilf;
      hilf=a16.replace...
      a16 = ("http://www."+hilf+".de/");
  }
  else
  {
      a16="";
  }
   //...

das mache ich etwa 20 mal.

Also ich habe checkboxen, wenn die aktiviert sind, sollen sie einen edittext Inhalt oder einen textview einlesen und in einer Hilfsvariable abspeichern.
Da ich die Inhalte und aus die Zustände der Checkboxen und die Edittexte beim erneuten öffnen der Activity erneut laden möchte, ich aber zum weiterverarbeiten nur die ersten fünf aktivierten brauche, habe ich mich für diesen Weg entschieden.


ich bin mir nun nicht ganz sicher, wie ich das mit der Abfrage und der Zählvariable machen kann.

Ich sehe schon vor lauter Bäumen den Wald nicht mehr...

Sorry^^
 
Code:
 		 if(a1.length()!=0)
		 {
			 if (tab1.length()!=0)
			 {
				if (tab2.length()!=0)
				{
					 if (tab3.length()!=0)
					 {
						if (tab4.length()!=0)
						{
							if (tab5.length()!=0)
							{

							}
							else
							{
								tab5=a1;
							}
						}
						else
						{
							tab4=a1;
						}
				}
				else
				{
					tab3=a1;
				}
			 }
			 else
			 {
				tab2=a1;
			 }			
		 }
		 else
		 {
			tab1=a1;
		 }
	 }
	/******
		  * 
		  * TAB ANFANG
		  * 
		  * 
		  **/		 
		 if(a2.length()!=0)
		 {
			 if (tab1.length()!=0)
			 {
				if (tab2.length()!=0)
				{
					 if (tab3.length()!=0)
					 {
						if (tab4.length()!=0)
						{
							if (tab5.length()!=0)
							{

							}
							else
							{
								tab5=a2;
							}
						}
						else
						{
							tab4=a2;
						}
				}
				else
				{
					tab3=a2;
				}
			 }
			 else
			 {
				tab2=a2;
			 }				
		 }
		 else
		 {
			tab1=a2;
		 }
	 }		 
	/******
		  * 
		  * TAB ANFANG
		  * 
		  * 
		  **/

...

macht so etwas sinn?
 
RobNeck schrieb:
Nimm doch einfach ne Zählvariable die immer um eins erhöht wird, wenn ein String in einem der Felder vorgefunden wird. Du scheinst ja schon ne Art Loop zu haben, der alle Felder durchgeht. Dann machste um den Loop nen einfaches if, das prüft ob die zählvariable schon 5 ist.

if(zählvariable < 5){
if(edittext.getText().length() > 0) {
kopiere text
zählvariable ++
}
}

Wenn er jetzt die "edittext"-Variable noch in ein Array verwandelt und dieses in einer Schleife iteriert, wird das dann auch funktionieren und ist wohl die naheliegendste Lösung.

- Deine edittext-Controls in ein Array packen
- Array von Anfang bis Ende in einer Schleife durchgehen
- innerhalb der Schleife prüfen, ob Text vorhanden
- wenn ja, Counter um 1 erhöhen, wenn Du 5 zusammen hast, Schleife abbrechen.
 
Du kannst es auch so probieren, deinLayout ist in dem Falle bspw. ein LinearLayout, in dem deine EditText-Felder drin sind:

PHP:
int iCount = 0;
for(int i = 0; i < deinLayout.getChildCount(); i++ ){
   if(deinLayout.getChildAt(i) instanceof EditText){
      // Prüfen, ob deinLayout.getChildAt(i) Text beinhaltet oder nicht
      if(deineBedingungen blabla){
          // mache irgendwas
          iCount++;
      }
   }

   if(iCount >= 5)
     break;
}
(ungetesteter Code, aber sollte so auch gehen, ist jedenfalls meiner Meinung nach sauberer, als verrückt 20 EditText-Felder überprüfen, verschachteln etc. - zudem kann man alles erweitern und kürzen im Layout und die Funktion sollte immer noch gehen)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: likedue und COleException
Vielen Dank,

ich habe das ganze jetzt nach renephs Hint lösen können und mir fast einen drittel des Sources sparen können.
 
Zurück
Oben Unten