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

2022-09-01 02:32:09

我已经根据用户在Android中的输入成功创建了EditTexts,并且我还为他们分配了唯一ID的使用方法。setId()

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

我正在使用,和方法,但似乎有点棘手...我无法将 EditText 的每个值分配给 String 变量。当我尝试这样做时,如果它不是不显示用户输入数据的情况,我会在Toast中显示它。getid()gettext().toString()NullPointerException

下面是代码:

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

}

我现在如何将每个编辑文本中的值传递给每个不同的字符串变量?如果某个机构可以帮助一个示例代码,那就太好了。


答案 1

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

您应该存储对所有编辑文本的所有引用:

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

更新:

根据要求:

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

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

答案 2

您也可以通过获取编辑文本数组来执行此操作。您应该存储对所有编辑文本的所有引用:

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