web-dev-qa-db-ja.com

Androidで動的に作成された各EditTextからデータを取得する方法は?

Androidでのユーザー入力に応じてEditTextを正常に作成し、setId()メソッドを使用して一意のIDを割り当てました。

次に、ユーザーがボタンをタップしたときに動的に作成されたEditTextsから値を取得し、それらすべてを文字列変数に格納することです。つまり、id '1'のEditTextからの値は、EditTextの数に応じて、String型のstr1に保存する必要があります。

getid()およびgettext().toString()メソッドを使用していますが、少し注意が必要です... EditTextの各値をString変数に割り当てることはできません。それをしようとすると、NullPointerExceptionが発生し、ユーザー入力データが表示されない場合は、トーストで表示します。

Heres、コード:

EditText ed;

for (int i = 0; i < count; i++) {   

        ed = new EditText(Activity2.this);
        ed.setBackgroundResource(R.color.blackOpacity);
        ed.setId(id);   
        ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        linear.addView(ed);

}

各EditTextから異なる文字列変数に値を渡すにはどうすればよいですか?サンプルコードを手伝ってくれる人がいれば、それは素晴らしいことです。

36
Mohammad Usman

すべての繰り返しでed変数を書き換えているため、ループが終了すると、edは最後に作成したEditTextインスタンスのみを指します。

すべてのEditTextへのすべての参照を保存する必要があります。

EditText ed;
List<EditText> allEds = new ArrayList<EditText>();

for (int i = 0; i < count; i++) {   

    ed = new EditText(Activity2.this);
    allEds.add(ed);
    ed.setBackgroundResource(R.color.blackOpacity);
    ed.setId(id);   
    ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed);
}

allEdsリストには、すべてのEditTextへの参照が保持されるため、それを繰り返してすべてのデータを取得できます。

更新:

リクエストごと:

String[] strings = new String[](allEds.size());

for(int i=0; i < allEds.size(); i++){
    string[i] = allEds.get(i).getText().toString();
}
54
Peter Knego

また、EditTextの配列を取得することにより、このようにすることもできます。すべてのEditTextへの参照をすべて保存する必要があります。

EditText ed[] = new EditText[count];    
for (int i = 0; i < count; i++) {   

    ed[i] = new EditText(Activity2.this);

    ed[i].setBackgroundResource(R.color.blackOpacity);
    ed[i].setId(id);   
    ed[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed[i]);
}

forループを使用して、EditTextから値を取得できます。

 for(int i = 0; i < ed.length; i++){

       Log.d("Value ","Val " + ed[i].getText());
  }
4
Sujit

JSON文字列からTableRows内に動的TextViewを生成するforループがあります。私がやったことは次のとおりです。

// Generate Dynamic tablerows and set a unique id
//m_jArry is a JSON Array

for(int i = 0; i < m_jArry.length(); i++)
{
    jo_inside = m_jArry.getJSONObject(i);
    TableRow row = new TableRow(getApplicationContext())
    row.setId(jo_inside.getInt("id"));
    ...        
    findViewById(row.getId())
    ...
}

FindViewById(row.getId())を使用して、アプリの動的TextViewテキストデータをEditTextフィールドに設定しています。 JSONを理解していない人のために、Androidプラットフォームについての良い説明がここにあると確信しています)ここにはいくつかの良いチュートリアルがあります。 Android newbie、しかし、これがあなたの一部に役立つことを願っています。

1
Artorias2718

これは、EditText.gettext()がEditableを返すため、toStringが機能しないためです。 String.valueOf(edittext.gettext)を試してください。

正しいEditTextが問題ないことを確認したら。 2テストを文字列denコードに渡す方法は

    EditText t = new EditText(this);
    t.setText("test");// obviously in ur case it will be intered by user
    String s = String.valueOf(t.getText());
    System.out.println(s);

それ以外の場合は、setTeg(Edittext)nを使用し、ボタンのクリック時にgetTagでeditTextを取得します。

            String[] strings = new String[allEds.size()];
            String[] strings1 = new String[allEdn.size()];

            for(int i=0; i < allEds.size(); i++){
                strings[i] = allEds.get(i).getText().toString();
                strings1[i] = allEdn.get(i).getText().toString();
                System.out.println("data in edittext name is  " +strings[i]);
                System.out.println("data in edittext number is " +strings1[i]);
            }

複数の編集テキスト用

0
rohit