【问题标题】:How to disable button if ANY EditText is empty?如果任何 EditText 为空,如何禁用按钮?
【发布时间】:2018-11-06 20:24:31
【问题描述】:

我尝试过使用 TextWatcher,但如果我创建多个 TextWatcher(每个 EditText 一个),当我开始填写任何 EditText 时,按钮就会启用。

例子:

public class MainActivity extends AppCompatActivity {

    EditText numberOneEditText;
    EditText numberTwoEditText;
    EditText numberThreeEditText;
    TextView sumTextView;

    public void calculate(View view) {


        String numberOneString = numberOneEditText.getText().toString();
        String numberTwoString = numberTwoEditText.getText().toString();
        String numberThreeString = numberThreeEditText.getText().toString();

        double numberOneDouble = Double.parseDouble(numberOneString);
        double numberTwoDouble = Double.parseDouble(numberTwoString);
        double numberThreeDouble = Double.parseDouble(numberThreeString);

        double sum = numberOneDouble + numberTwoDouble + numberThreeDouble;

        sumTextView.setText(sum.getText().toString())

   }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        numberOneEditText = findViewById(R.id.numberOneEditText);
        numberTwoEditText = findViewById(R.id.numberTwoEditText);
        numberThreeEditText = findViewById(R.id.numberThreeEditText);
        sumTextView = findViewById(R.id.sumTextView);

    }
}

【问题讨论】:

  • 我没有看到 textwatcher。请再试一次。
  • 您可以为所有这些使用 1 个文本观察器
  • 为每个editText添加TextWatcher并检查onTextChange中的条件。

标签: java android button android-edittext


【解决方案1】:

使用TextWatcher。它会解决你的问题:

editText.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

       if(s.toString().trim().length()==0){
            btn.setEnabled(false);
          } else {
            btn.setEnabled(true);
          }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
    }
});

【讨论】:

    【解决方案2】:

    您只需声明一个分配给所有编辑文本的文本观察器。然后:

      btn.setEnabled(!(str1.isEmpty || str2.isEmpty() || str3.isEmpty));
    

    您也可以直接检查它是否是有效的双重,如果不是,则不启用。

    【讨论】:

      【解决方案3】:

      您的文本观察者应检查所有三个 EditText 是否都有数据(最好还确保它们是双精度的,否则显示带有错误消息的标签)

      类似这样的:

        TextWatcher watcher = 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) {
            }
      
            @Override
            public void afterTextChanged(Editable s) {
                for (EditText et  : new EditText[] {numberOneEditText, 
      numberTwoEditText, numberThreeEditText}) {
                try {
                  Double.parseDouble(et.getText());
                } catch (NumberFormatException e) {
                  // Disable button, show error label, etc.
                  button.setEnabld(false);
                  return;
                }
              }
             //Enable buttton, hide error label if available
             button.setEnabled(true);
            }
          };
      }
      numberOneEditText.addTextChangedListener(watcher);
      numberTwoEditText.addTextChangedListener(watcher);
      numberThreeEditText.addTextChangedListener(watcher);
      

      【讨论】:

        【解决方案4】:

        这一定能解决你的问题:

        public class AppActivity extends Activity {
        
            private EditText editText1;
            private EditText editText2;
        
            private TextWatcher textWatcher = new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        
                }
        
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                    checkFieldsForEmptyValues();
                }
        
                @Override
                public void afterTextChanged(Editable editable) {
                }
            };
        
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.register_activity);
        
                editText1 = (EditText) findViewById(R.id.reg_password);
                editText2 = (EditText) findViewById(R.id.reg_password2);
        
                editText1.addTextChangedListener(textWatcher);
                editText2.addTextChangedListener(textWatcher);
        
                checkFieldsForEmptyValues();
        
            }
        
            private  void checkFieldsForEmptyValues(){
                Button btn = (Button) findViewById(R.id.btnId);
        
                String s1 = editText1.getText().toString();
                String s2 = editText2.getText().toString();
        
                if (s1.length() > 0 && s2.length() > 0) {
                    btn.setEnabled(true);
                } else {
                    btn.setEnabled(false);
                }
            }
        }
        

        谢谢。

        【讨论】:

          【解决方案5】:
                  EditText numberOneEditText;
                  EditText numberTwoEditText;
                  EditText numberThreeEditText;
                  TextView sumTextView;
          
                  public void calculate(View view) {
          
                          boolean isValid = true;
                          String numberOneString = numberOneEditText.getText().toString();
                          String numberTwoString = numberTwoEditText.getText().toString();
                          String numberThreeString = numberThreeEditText.getText().toString();
                          if(numberOneString.trim().isEmpty ||numberTwoString.trim().isEmpty() 
                       || numberThreeString.trim().isEmpty()){
                        isValid = false;}
                        if(isValid){
                          double numberOneDouble = Double.parseDouble(numberOneString);
                          double numberTwoDouble = Double.parseDouble(numberTwoString);
                          double numberThreeDouble = Double.parseDouble(numberThreeString);
          
                              double sum = numberOneDouble + numberTwoDouble + numberThreeDouble;
          
                              sumTextView.setText(sum.getText().toString())
              }  
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-07-10
            • 1970-01-01
            • 1970-01-01
            • 2016-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多