我有一个问题,我正在尝试创建一个应用程序,其中一个帐单在许多人之间分开。话虽如此,我还必须说我是一个初学者,我写的代码可能需要收紧。 我已经使用TextWatcher方法来观察两(2)个EditText字段。这似乎只适用于两个(2)字段Billtotal和Number of People的一个方向。逻辑似乎只在一个方向上工作,其中Billtotal需要最后才能实现。如果我先选择Billtotal字段进入逻辑似乎不起作用。我发现这很奇怪,因为我使用&&布尔逻辑中的运算符:
private void enablecalifready() {
boolean isready= (numofpep.getText().length() > 0) && (billtotal.getText().length() > 0);
if(isready){
calcbtn.setEnabled(true);
}else {
calcbtn.setEnabled(false);
}
}
以上代码选自以下代码:
billtotal.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
enablecalifready();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int count,int after) {
}
});
现在我的应用程序以禁用按钮开始,我想要的是当逻辑发现两个字段都填充了项目时,无论它们输入的顺序是什么,一旦填充了两个字段,按钮就会启用。
我对任何逻辑都持开放态度,因为我是Android编码世界的新手并且愿意接受任何帮助。
答案 0 :(得分:1)
boolean isready= (numofpep.getText().length() > 0) && (billtotal.getText().length() > 0);
应该是:
if(numofpep.getText().length() > 0) && (billtotal.getText().length() > 0){
isready = true;
}else{
isready = false;
}
我会使用一种方法:
private boolean isReady(){
if(numofpep.getText().length() > 0) && (billtotal.getText().length() > 0){
return true;
}else{
return false;
}
}
在接下来的TextChanged或onCheckChanged方法中,我会这样做:
calcbtn.setEnabled(isReady());
答案 1 :(得分:0)
您只是将监听器添加到billTotal EditText中,因此只有在编辑该字段中的文本后才会调用您的方法。您应该将观察者代码放入一个新变量中,并将其指定为两个EditText字段的文本更改侦听器,如下所示:
TextWatcher textWatcher = new TextWatcher() {
@Override public void afterTextChanged(Editable s) {
enablecalifready();
}
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override public void onTextChanged(CharSequence s, int start, int count,int after) { }
}
numofpep.addTextChangedListener(textWatcher);
billtotal.addTextChangedListener(textWatcher);
还要考虑按照Robin所说的方式启用按钮,因为它们是正确的 - 它更清晰