Как получить данные из каждого динамически созданного EditText в Android?
Я успешно создал EditTexts в зависимости от ввода пользователя на Android, а также присвоил им уникальный идентификатор с помощью метода setId()
.
Теперь то, что я хочу сделать, - это получить значения из динамически созданного EditText
, когда пользователь нажимает кнопку, а затем сохраняет все из них в переменных String. то есть значение из EditText с идентификатором '1' должно быть сохранено в str1 типа String и т.д. в зависимости от количества 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 для каждой переменной строки? Если бы какой-то орган мог помочь с образцом кода, было бы неплохо.
Ответы
Ответ 1
В каждой итерации вы переписываете переменную 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, поэтому вы можете повторить его и получить все данные.
Update:
По запросу:
String[] strings = new String[](allEds.size());
for(int i=0; i < allEds.size(); i++){
string[i] = allEds.get(i).getText().toString();
}
Ответ 2
Вы также можете сделать это, взяв массив 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]);
}
и вы можете использовать для цикла, чтобы получить значение из EditText.
for(int i = 0; i < ed.length; i++){
Log.d("Value ","Val " + ed[i].getText());
}
Ответ 3
У меня есть цикл for, генерирующий динамические TextViews в TableRows из строки JSON. Вот что я сделал:
// 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, но надеюсь, что это будет полезно для некоторых из вас.
Ответ 4
это потому, что EditText.gettext() возвращает Editable, поэтому toString работать не будет.
попробуйте String.valueOf(edittext.gettext).
если u уверен, что вы получите правильный EditText, но prob. это то, как 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);
else использовать setTeg (Edittext) n получить editText с помощью кнопки getTag при нажатии кнопки.
Ответ 5
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