2016-07-26 4 views
0

Ich füge EditText im linearen Layout hinzu und es gibt eine Ansicht wie im Bild. enter image description hereWie man Daten von vielen EditTexts erhält, wenn es im Layout programmatisch in android hinzugefügt wird

Ich bekomme diese Ansicht mit diesem Code.

public class SearchRecipe extends AppCompatActivity { 
 
    LinearLayout parentLayout; 
 
    ImageButton searchRecipe; 
 
    private int EDITTEXT_ID = 1; 
 
    private List<EditText> editTextList; 
 
    EditText editTextItem; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_search_recipe); 
 
     setActionBar(); 
 
     init(); 
 
     searchRecipe.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       EditText editTextItem = (EditText) parentLayout.findViewById(EDITTEXT_ID); 
 
       for (int i = 0; i < editTextList.size(); i++) { 
 
        Log.e("All Values=", editTextList.get(i).getText().toString()); 
 
        Toast.makeText(SearchRecipe.this, editTextItem.getText().toString() + " ", Toast.LENGTH_SHORT).show(); 
 
       } 
 
      } 
 
     }); 
 
    } 
 

 
    public void init() { 
 
     parentLayout = (LinearLayout) findViewById(R.id.parent_layout); //make sure you have set vertical orientation attribute on your xml 
 
     searchRecipe = (ImageButton) findViewById(R.id.search_button); 
 
     editTextList = new ArrayList<EditText>(); 
 

 
     TextView addMoreText = new TextView(this); 
 
     addMoreText.setText("Add More Ingredients"); 
 
     addMoreText.setGravity(Gravity.CENTER); 
 
     addMoreText.setPadding(20, 20, 20, 20); 
 
     addMoreText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.add, 0); 
 
     addMoreText.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       editTextItem = new EditText(SearchRecipe.this); 
 
       editTextItem.setId(EDITTEXT_ID); 
 
       editTextList.add(editTextItem); 
 
       EDITTEXT_ID++; 
 
       editTextItem.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.cross, 0); 
 
       editTextItem.setPadding(20, 20, 20, 20); 
 
       editTextItem.setOnLongClickListener(new View.OnLongClickListener() { 
 
        @Override 
 
        public boolean onLongClick(View v) { 
 
         parentLayout.removeView(editTextItem); 
 
         return true; 
 
        } 
 
       }); 
 

 
       parentLayout.addView(editTextItem, 0); 
 
      } 
 
     }); 
 

 
     parentLayout.addView(addMoreText); 
 
    }

nun das einzige Problem ist, dass ich gegenüber. Ich bekomme den Text von editiertext nicht richtig. Lass mich erklären, was ich machen möchte.

  1. Klicken Sie auf Hinzufügen Weitere TextView fügt einen weiteren Text hinzu.
  2. Nach dem Hinzufügen aller Edittexte klicke ich auf Suchen.
  3. Durch Klicken auf die Schaltfläche Suchen werden die Daten von edittexs abgerufen und in Arraylist gespeichert. Ich habe viel ausprobiert, kann das aber nicht richtig machen. Willst du mir bitte helfen, das Ding zu machen? Ich bin seit vielen Tagen eingesperrt.

Antwort

0

können Sie tun, wie unten, wenn in Fragment zu sehen.

public static String getText(final Activity activity) { 
final StringBuilder stringBuilder=new StringBuilder(); 

      LinearLayout scrollViewlinerLayout = (LinearLayout) activity.findViewById(R.id.linearLayoutForm); 
      ArrayList<String> msg = new ArrayList<String>(); 
      for (int i = 0; i < scrollViewlinerLayout.getChildCount(); i++) 
      { 
       LinearLayout innerLayout = (LinearLayout) scrollViewlinerLayout.getChildAt(i); 
       EditText editText = (EditText) innerLayout.findViewById(R.id.meeting_dialog_et); 
       msg.add(editText.getText().toString()); 
      } 
      for (int j=0;j<msg.size();j++) 
      { 
       stringBuilder.append(msg.get(j)).append(";"); 
      } 
      Toast t = Toast.makeText(activity.getApplicationContext(), stringBuilder.toString(), Toast.LENGTH_SHORT); 
      t.show(); 

    return stringBuilder.toString(); 
} 

es eine andere Möglichkeit ist Arraylist Edittexes machen und jede EditText hinzufügen, wenn es um das Layout eingefügt. dann können Sie wie unten erhalten:

for (int i = 0; i < Edittexes.size(); i++) { 
        if (Edittexes.get(i) == view) 
        { 
         String text=Edittexes.get(i).getText(); 


       } 

       } 
0

die editext aus der Liste holen editTextList

String data = editTextList.get(index).getText().toString(); 

Add-Check für editTextList sollte nicht null oder leer sein.

0

nur eine Schleife durch alle Kinder des linearen Layout, in dem Sie die EditText hinzufügen wie diese

LinearLayout linearLayout= (LinearLayout)findViewById(R.id.linear5); 
     //looping through all the editText in the linear layout 
     for(int i=0;i<linearLayout.getChildCount();i++){ 
      EditText edit= (EditText) linearLayout.getChildAt(i); 
      //now you have your edittext do whatever you want 
     } 
0

Sie Liste iterieren können über mit foreach-Schleife

for (EditText editText : editTextList) { 
      // now you can get the value from Edit-text and save in the ArrayList 
      yourArraList.add(editText.getText().toString())); 
     } 
1

wenn Sie createing Textlaufzeit nur für diesen Zweck editieren, dann sind keine Schlepplinien erforderlich

editTextItem.setId (EDITTEXT_ID);
EDITTEXT_ID ++;

Um Daten von jedem Eingabefeld unten folgen Dinge retrive

for (EditText editText : editTextList) { 
     /* now you can get the value from Edit-text and save in the ArrayList 
      or you can append it in same string*/ 
     yourArraList.add(editText.getText().toString())); 
    } 
Verwandte Themen