Как получить значение из динамического EditText и сохранить значения в массиве целых чисел?

1

Я тестирую новое приложение, в котором я реализовал динамический EditText, но застрял с проблемой. Я добавил Editexts в массив List, и я пытаюсь получить значение из EditText и сохранить его в целочисленный массив, но когда я нажимаю на кнопку, я получаю пустое значение.

Мой код:

List<EditText> all_value1 = new ArrayList<EditText>();
TextView textView = new TextView(this);
for (i = 0; i < 5; i++) {
    editText1 = new EditText(this);
    editText1.setInputType(TYPE_CLASS_NUMBER);
        all_value1.add(editText1);  
    linearlayout.addView(editText1);
}

int a[] = new int[all_value1.size()]

for(int i = 0; i < all_value.size(); i++) {
    a[i] = Integer.parseInt(all_value1.get(i).getText().toString());
}

Button b = new Button(this);
b.setOnClickListener(new View.OnCLickListener() {
    @override
    public void onClick(View v) {
        textView.setText(String.valueOf(a[0])); //I dont want to use all_value1.get(0).getText().toString()
    }
})

Я ожидаю, чтобы сохранить все значения edittexts в массиве целых чисел, и при нажатии кнопки я должен получить конкретное значение из этого массива.

Теги:
arraylist
dynamic
android-edittext

1 ответ

0

Предполагая, что вы написали приведенный выше код в методе onCreate(), первоначально все ваши тексты редактирования будут пустыми, поэтому ваш Integer.parseInt(all_value1.get(i).getText().toString()) вызовет исключение NumberFormatException.
Попробуй поймать решение, такое как:

for (int i = 0; i < all_value1.size(); i++) {
            try {
                c[i] = Integer.parseInt(all_value1.get(i).getText().toString());
            } catch (Exception e) {
                c[i] = 0;
            }
 }

бесполезно, так как это инициализирует полный массив a [] с нулями, и вам нужно будет назначить TextChangedListener для всех ваших редактируемых текстов, если вы хотите, чтобы что-то произошло (то есть изменить значение соответствующего a [i]), когда вы введите что-нибудь в свой EditText.

Простым решением было бы сделать массив не целочисленного типа, а самого типа EditText (если вы действительно не хотите использовать функцию get() при каждом нажатии кнопки).

Попробуйте следующий код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    List<EditText> all_value1 = new ArrayList<>();
    final TextView textView = new TextView(this);
    EditText editText1;
    LinearLayout linearLayout = findViewById(R.id.ll);
    linearLayout.addView(textView);
    for (int i = 0; i < 5; i++) {
        editText1 = new EditText(this);
        editText1.setInputType(TYPE_CLASS_NUMBER);
        all_value1.add(editText1);
        linearLayout.addView(editText1);
    }

    final EditText a[] = new EditText[all_value1.size()];

    for (int i = 0; i < all_value1.size(); i++) {
        a[i] = all_value1.get(i);
    }

    Button b = new Button(this);
    linearLayout.addView(b);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textView.setText(a[0].getText().toString());
        }
    });
}

Если вам нужно значение типа int, вы можете использовать Integer.parseInt(a[i].getText().toString()) после того, как вы ввели что-то в EditText. Это решение заставит кнопку делать свое дело, если вы не удовлетворены, вам придется назначить слушателей на EditText (s).

  • 0
    Я хочу сохранить эти значения текстового представления в другом массиве, называемом int edittextvalues [] = new int [5]; это то, что я спрашивал, если я делаю это, я получаю число для выражения
  • 0
    Это потому, что вся работа (инициализация массивов и присвоение значений) выполняется при вызове onCreate (). Изначально в EditText ничего нет, поэтому очевидно, что вы получите исключение, поскольку строка в EditText - это "", которая не является целым числом. Что бы вы не хотели делать с целочисленными значениями, просто передайте массив EditText в функцию, где вы можете использовать Integer.parseInt (a [i] .getText (). ToString ()). Изучите жизненные циклы активности Android, если вы не уверены, что и когда вычисляется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню