Android 当其他Edittext更改时更新Edittext
我正在尝试根据其他Android 当其他Edittext更改时更新Edittext,android,android-edittext,Android,Android Edittext,我正在尝试根据其他EditText更新单个EditText。出于某种原因,在我必须设置文本之前,一切正常,然后我会得到一个连续的错误列表。我似乎不知道为什么或者这是否是最佳实践。任何帮助都将不胜感激。如果我把文本的设置注释掉。我的应用程序运行良好。这是我的代码: final Boolean[] hasValue = {false}; ArrayList<EditText> editTexts = new ArrayList<>(); // Container l
EditText
更新单个EditText
。出于某种原因,在我必须设置文本之前,一切正常,然后我会得到一个连续的错误列表。我似乎不知道为什么或者这是否是最佳实践。任何帮助都将不胜感激。如果我把文本的设置注释掉。我的应用程序运行良好。这是我的代码:
final Boolean[] hasValue = {false};
ArrayList<EditText> editTexts = new ArrayList<>(); // Container list
ArrayList<Double> values = new ArrayList<>(); // value list
editTexts.add(IBalance); // editTexts[0]
editTexts.add(Trading); // editTexts[1]
editTexts.add(Binary); // editTexts[2]
editTexts.add(Referrals); // editTexts[3]
editTexts.add(Leader1); // editTexts[4]
editTexts.add(Leader2); // editTexts[5]
editTexts.add(Deposit); // editTexts[6]
editTexts.add(Withdrawal); // editTexts[7]
editTexts.add(Total); // editTexts[8]
for (final EditText editText : editTexts) { //need to be final for custom behaviors
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
/*if (editText.getText().toString().equals("0")) {
editText.setText("");
}*/
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (editText.getText().toString().equals("") || editText.getText().toString().equals("0")) {
editText.setText("0.0");
editText.setSelection(editText.getText().length());
}
else if(editText.getText().toString().equals("0.0"))
editText.setSelection(editText.getText().length());
}
@Override
public void afterTextChanged(Editable s) {
values.add(Double.parseDouble(IBalance.getText().toString())); //[0]
values.add(Double.parseDouble(Trading.getText().toString())); //[1]
values.add(Double.parseDouble(Binary.getText().toString())); //[2]
values.add(Double.parseDouble(Referrals.getText().toString())); //[3]
values.add(Double.parseDouble(Leader1.getText().toString())); //[4]
values.add(Double.parseDouble(Leader2.getText().toString())); //[5]
values.add(Double.parseDouble(Deposit.getText().toString())); //[6]
values.add(Double.parseDouble(Withdrawal.getText().toString())); //[7]
for (final Double db : values) {
hasValue[0] = db != null;
}
double total = 0;
if(hasValue[0]=true)
{
total = values.get(0)+values.get(1)+values.get(2)+values.get(3)+values.get(4)+values.get(5)+values.get(6)-values.get(0);
//ERROR OCCURS Total.setText(String.valueOf(total)); //ERROR OCCURS
}
values.clear();
}
});
}
final Boolean[]hasValue={false};
ArrayList EditText=新建ArrayList();//集装箱清单
ArrayList值=新建ArrayList();//价值清单
编辑文本。添加(iLance);//编辑文本[0]
编辑文本。添加(交易);//编辑文本[1]
editText.add(二进制);//编辑文本[2]
编辑文本。添加(推荐);//编辑文本[3]
编辑文本。添加(领导1);//编辑文本[4]
编辑文本。添加(领导2);//编辑文本[5]
编辑文本。添加(存款);//编辑文本[6]
编辑文本。添加(撤回);//编辑文本[7]
编辑文本。添加(总计);//编辑文本[8]
对于(final-EditText-EditText:EditText){//对于自定义行为需要是final
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
/*如果(editText.getText().toString().equals(“0”)){
editText.setText(“”);
}*/
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
如果(editText.getText().toString().equals(“”| | editText.getText().toString().equals(“”)0){
editText.setText(“0.0”);
editText.setSelection(editText.getText().length());
}
else if(editText.getText().toString().equals(“0.0”))
editText.setSelection(editText.getText().length());
}
@凌驾
公共无效后文本已更改(可编辑){
values.add(Double.parseDouble(IBalance.getText().toString());//[0]
values.add(Double.parseDouble(Trading.getText().toString());//[1]
values.add(Double.parseDouble(Binary.getText().toString());//[2]
values.add(Double.parseDouble(referels.getText().toString());//[3]
values.add(Double.parseDouble(Leader1.getText().toString());//[4]
values.add(Double.parseDouble(Leader2.getText().toString());//[5]
values.add(Double.parseDouble(Deposit.getText().toString());//[6]
values.add(Double.parseDouble(drawing.getText().toString());//[7]
用于(最终双db:值){
hasValue[0]=db!=null;
}
双倍合计=0;
if(hasValue[0]=true)
{
总计=值。获取(0)+值。获取(1)+值。获取(2)+值。获取(3)+值。获取(4)+值。获取(5)+值。获取(6)-值。获取(0);
//发生错误Total.setText(String.valueOf(Total));//发生错误
}
value.clear();
}
});
}
这是运行控制台中的错误屏幕:
它重复了很长时间,以至于错误的开始被切断。这就是应用程序的外观:
检查值是否为空是不正确的
boolean[]hasValue={false}
替换为boolean hasValue=true
for (final Double db : values) {
if (db == null) {
hasValue = false;
break;
}
}
这是因为在最初的一个中,您将hasValue编辑为仅依赖于值的最后一个元素
另外,在
total=…
行中,您使用了values.get(0)-values.get(0)
。这引起了我的好奇心。您检查值是否为空是不正确的
boolean[]hasValue={false}
替换为boolean hasValue=true
for (final Double db : values) {
if (db == null) {
hasValue = false;
break;
}
}
这是因为在最初的一个中,您将hasValue编辑为仅依赖于值的最后一个元素
另外,在
total=…
行中,您使用了values.get(0)-values.get(0)
。这引起了我的好奇心。您的问题是,您还将总计
添加到您的列表中。这就是为什么道达尔也能得到听众
在自己的侦听器中设置EditText的文本会创建一个无休止的循环
删除此行
editTexts.add(Total); // editTexts[8]
您的问题是,您还将
total
添加到列表中。这就是为什么道达尔也能得到听众
在自己的侦听器中设置EditText的文本会创建一个无休止的循环
删除此行
editTexts.add(Total); // editTexts[8]
Total
是您的for
循环的一部分,您正在posterextchanged
中设置Total
,因此您的循环永远不会结束。尝试删除编辑文本。添加(总计)Total
是您的for
循环的一部分,您正在posterextchanged
中设置Total
,因此您的循环永远不会结束。尝试删除编辑文本。添加(总计)代码>这绝对正确,但不是显示错误的原因谢谢您的建议并在我的计算中发现错误!这是绝对正确的,但不是显示错误的原因谢谢你的建议,并在我的计算中发现了错误!