我正在测试一个新的应用程序,我在其上实现了动态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 []为0,如果你想要发生某些事情(即改变相应的a [i]的值),你将不得不为你的所有编辑文本分配一个TextChangedListener在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值,你可以在EditText中输入一些东西后使用Integer.parseInt(a[i].getText().toString())
。这个解决方案会让按钮做自己的事情,如果不满意你就会把侦听器分配给EditText。