如何从动态EditText获取值并将值存储在整数数组中?

时间:2019-02-15 15:51:37

标签: android arraylist dynamic android-edittext

我正在测试一个新应用,该应用上我实现了动态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值存储到一个整数数组,然后单击按钮,我应该从该数组中获取一个特定值。

1 个答案:

答案 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。