Как получить данные от каждого динамически созданного EditText в Android? - PullRequest
35 голосов
/ 07 мая 2011

Я успешно создал EditTexts в зависимости от пользовательского ввода в Android, а также назначил им уникальные идентификаторы, используя метод setId().

Теперь я хочу получить значения из динамически создаваемых EditText s, когда пользователь нажимает кнопку, а затем сохранить их все в строковых переменных.то есть значение из EditText с идентификатором '1' должно быть сохранено в str1 типа String и т. д. в зависимости от количества EditTexts.

Я использую методы getid() и gettext().toString(), но кажется, чтонемного сложно ... Я не могу назначить каждое значение EditText для переменной String.Когда я пытаюсь сделать это, происходит 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);

}

Как теперь передать значение из каждого EditText в каждую строковую переменную?Если бы какое-то тело могло помочь с примером кода, было бы неплохо.

Ответы [ 5 ]

53 голосов
/ 08 мая 2011

На каждой итерации вы переписываете переменную 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();
}
4 голосов
/ 08 мая 2011

Вы также можете сделать это, взяв массив 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());
  }
1 голос
/ 28 августа 2014

У меня есть цикл 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, есть несколько хороших руководств (я уверен, что здесь есть отличные объяснения по переполнению стека) для платформы Android.Я все еще новичок на Android, но я надеюсь, что это поможет некоторым из вас там.

0 голосов
/ 10 апреля 2015
            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 голосов
/ 08 мая 2011

это потому, что 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) и получите editText с помощью getTag при нажатии кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...