Подтвердить что ты не робот

Как получить данные из каждого динамически созданного 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 для каждой переменной строки? Если бы какой-то орган мог помочь с образцом кода, было бы неплохо.

4b9b3361

Ответ 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