如何从Android中每个动态创建的EditText中获取数据?

时间:2011-05-07 19:45:15

标签: java android string android-edittext

我已经成功创建了EditTexts,具体取决于Android中的用户输入,我也使用setId()方法为其分配了唯一的ID。

现在我想要做的是在用户点击按钮时从动态创建的EditText获取值,然后将所有值存储在String变量中。即来自具有id为'1'的EditText的值应该保存在String类型的str1中,依此类推,具体取决于EditTexts的数量。

我正在使用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中的值传递给每个不同的字符串变量?如果某个团体可以帮助提供示例代码,那就太好了。

5 个答案:

答案 0 :(得分:52)

在每次迭代中,您都在重写ed变量,因此当循环结束时ed仅指向您创建的最后一个EditText实例。

您应该存储对所有EditTexts的所有引用:

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列表保存对所有EditTexts的引用,因此您可以迭代它并获取所有数据。

<强>更新

根据要求:

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

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

答案 1 :(得分:3)

您也可以通过使用EditText数组来完成此操作。 您应该存储对所有EditTexts的所有引用:

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

答案 2 :(得分:1)

我有一个for循环从JSON字符串在TableRows中生成动态TextViews。这就是我的所作所为:

// 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的人来说,有一些很好的教程(我确定在Stack Overflow上有很好的解释)适用于Android平台。我还是一个Android新手,但我希望这对你们中的一些人有所帮助。

答案 3 :(得分:0)

这是因为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。

答案 4 :(得分:0)

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

用于多个edittext