Я тестирую новое приложение, в котором я реализовал динамический 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 в массиве целых чисел, и при нажатии кнопки я должен получить конкретное значение из этого массива.
Предполагая, что вы написали приведенный выше код в методе 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).