汇总以编程方式创建的编辑文本中的所有十进制值

问题描述

请帮助,我想创建30个编辑文本并获取它们的总和。目前,我能够获得总和,但这仅适用于整数。输入十进制值时,总和不准确。当我删除任何一个编辑文本中的值时,程序崩溃,请提供有关如何防止这种情况的建议。谢谢!

 for (int i = 1; i < 31; i++) {
        EditText editText = new EditText(this);
        editText.setHint("Recording Length: " + "#" + i);
        editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        editSampling.addView(editText);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s,int start,int count,int after) {
            }

            @Override
            public void onTextChanged(CharSequence s,int before,int count) {
                List<Double> getAverageLength= new ArrayList<Double>();
                String text = editText.getText().toString();
                double value = Double.parseDouble(text);
                getAverageLength.add(value);
                double sum = 0;
                for (int m = 0; m < getAverageLength.size(); m++)
                    sum = sum + getAverageLength.get(m) / getAverageLength.size();
                String toString = String.valueOf(sum);
                avgLength.setText(toString);
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

解决方法

程序逻辑略有错误。只需使用以下代码:

List<Double> getAverageLength = new ArrayList<>();
final EditText avgLength; //or TextView... your choice
for (int i = 0; i < 30; i++) {
    getAverageLength.add(0);
    EditText editText = new EditText();
    editText.setHint("Recording Length: #"+(i+1));
    editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
    editSampling.addView(editText);
    editText.addTextChangedListener(new TextWatcher() {
        ...
        @Override
        public void onTextChanged(CharSequence s,int start,int before,int count) {
            String text = editText.getText().toString();
            double value = 0;
            if (text != null && !text.equals("")) {
                value = Double.parseDouble(text);
            }
            getAverageLength.set(i,value);
            double sum = 0;
            for (int m = 0; m < getAverageLength.size(); m++)
                sum += getAverageLength.get(m) / getAverageLength.size();
            String toString = String.valueOf(sum);
            avgLength.setText(toString);
        }
        ...
    });
}

编辑:我忘记指出您代码中的错误。在onTextChanged中,您已经重新初始化了列表,并且仅将当前EditText的读数附加到该列表上。这可能会返回错误的总和。此外,您没有检查EditText的文本字符串是否为空或空白。不过,我看不出如何解决您的确切问题。