2016-07-26 9 views
0

EditTextを線形レイアウトで追加しています。 enter image description here多くのEditTextsからデータを取得する方法アンドロイドでプログラムでレイアウトにプログラムを追加する

このコードを使用してこのビューを取得しています。

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); 
 
    }

今、私が直面してる唯一の問題はそれです。 edittextからテキストを正しく取得できません。私がしたいことを説明しましょう。

  1. [追加]をクリックします。TextViewはもう1つの編集テキストを追加します。
  2. すべての編集テキストを追加した後、[検索]ボタンをクリックします。
  3. 検索ボタンをクリックすると、編集テキスからデータが取得され、arraylistに保存されます。私はたくさん試しましたが、これを正しく行うことはできません。あなたは私にこの事をするのを助けてくれますか?私は何日も立ち往生している。

答えて

0

フラグメント内で表示すると次のようになります。

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(); 
} 

レイアウトに追加したときに、編集者を作成し、各編集テキストを追加する別の方法があります。その後、あなたは以下のように取得することができます:editTextListがnullまたは空であってはならないため

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


       } 

       } 
0

あなたのリストからeditexteditTextList

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

はチェックを追加取得します。あなたがcreateingしている場合は、のために、各ループ

​​
0

だけループこの目的のためだけにテキスト実行時間を編集すると、以下のような牽引線の必要はありません。

editTextItem.setId(EDITTEXT_ID);
EDITTEXT_ID ++;物事の下に続く

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())); 
    } 
各エディットボックスからデータをretriveする

0

のようなのEditTextを追加しているリニアレイアウトのすべての子供を通して

1

使用して、リストを反復処理することができますが、この

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 
     } 
関連する問題