我已经成功创建了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中的值传递给每个不同的字符串变量?如果某个团体可以帮助提供示例代码,那就太好了。
答案 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