我正在测试一个新应用,该应用上我实现了动态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值存储到一个整数数组,然后单击按钮,我应该从该数组中获取一个特定值。
答案 0 :(得分: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;
}
}
是没有用的,因为这将用0s初始化完整的数组a [],如果您希望发生某些事情,则必须为所有编辑文本分配一个 TextChangedListener (例如,更改当您在EditText中键入内容时,对应a [i]的值)。
一个简单的解决方案是使数组不是整数类型,而是本身为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。