Как отключить кнопку, если ЛЮБОЙ EditText пуст? - PullRequest
0 голосов
/ 28 мая 2018

Я пытался использовать 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);

    }
}

Ответы [ 5 ]

0 голосов
/ 28 мая 2018
        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())
    }  

}
0 голосов
/ 28 мая 2018

Это должно решить вашу проблему:

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);
        }
    }
}

Спасибо.

0 голосов
/ 28 мая 2018

Вам нужно только объявить один текстовый наблюдатель, который вы назначаете всем текстовым текстам.Тогда:

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

Вы также можете напрямую проверить, является ли это допустимым двойным числом, и не включить его, если нет.

0 голосов
/ 28 мая 2018

Ваш наблюдатель текста должен проверить, что все три EditTexts имеют данные (желательно также убедиться, что они двойные, и отображать метку с сообщением об ошибке, если в противном случае)

Примерно так:

  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);
0 голосов
/ 28 мая 2018

Использовать 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
    }
});
...