总结以编程方式创建的编辑文本中的所有十进制值
Posted
技术标签:
【中文标题】总结以编程方式创建的编辑文本中的所有十进制值【英文标题】:Sum up all decimal value in programmatically created edit text 【发布时间】:2021-01-24 09:36:19 【问题描述】:请帮忙,我想创建 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 start, 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)
);
【问题讨论】:
【参考方案1】:程序逻辑有点错误。只需使用以下代码:
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 的文本字符串是否为空或空白。不过,我不知道这将如何解决您的确切问题。
【讨论】:
以上是关于总结以编程方式创建的编辑文本中的所有十进制值的主要内容,如果未能解决你的问题,请参考以下文章