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

问题描述 投票:1回答: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值存储到整数数组,并在按钮单击时我应该从该数组中获取特定值。

android 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 []为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。

© www.soinside.com 2019 - 2024. All rights reserved.