使用布尔逻辑检查2个EditText字段以提供1个按钮启用或禁用

时间:2013-12-16 22:16:32

标签: android button android-edittext textwatcher

我有一个问题,我正在尝试创建一个应用程序,其中一个帐单在许多人之间分开。话虽如此,我还必须说我是一个初学者,我写的代码可能需要收紧。 我已经使用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编码世界的新手并且愿意接受任何帮助。

2 个答案:

答案 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所说的方式启用按钮,因为它们是正确的 - 它更清晰