Как отключить кнопку многократного редактирования текста с помощью Textwatcher? - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь отключить мою кнопку, если мои тексты ввода ввода пустые. Я использую текстовый наблюдатель для этого. Чтобы проверить это, я только попытался только с двумя текстами редактирования, чтобы начаться. Тем не менее, моя кнопка остается включенной, несмотря ни на что.

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

    fnameInput = findViewById(R.id.et_firstname);
    lnameInput = findViewById(R.id.et_lastname);
    numberInput = findViewById(R.id.et_phone);
    emailInput = findViewById(R.id.et_email);
    nextBtn = findViewById(R.id.btn_next);

    fnameInput.addTextChangedListener(loginTextWatcher);
    lnameInput.addTextChangedListener(loginTextWatcher);


    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            launchNextActivity();
        }
    });
}

Метод просмотра текста

private TextWatcher loginTextWatcher = 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) {

        String firstNameInput =firstNameInput.getText().toString().trim();
        String lastNameInput = lastNameInput.getText().toString().trim();


        // tried doing it this way 
        nextBtn.setEnabled(!firstNameInput.isEmpty() && !lastNameInput.isEmpty());

        //What i've also tried 
        if(firstNameInput.length()> 0 &&
                lastNameInput.length()>0){
            nextBtn.setEnabled(true);
        } else{
            nextBtn.setEnabled(false);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

Я ожидаю, что кнопка будет отключена, если один или все входы пусты, и активна, когда заполнены все поля ввода.

Ответы [ 3 ]

0 голосов
/ 03 мая 2019

О!Вы сделали небольшую ошибку.Используйте условие OR вместо AND.Таким образом, ваш код должен быть

nextBtn.setEnabled(!firstNameInput.isEmpty() || !lastNameInput.isEmpty());

И TextWatcher будет уведомлять только тогда, когда вы вручную измените ввод EditText.Поэтому TextWatcher не будет запускаться при запуске.Поэтому сначала в методе onCreate вы должны вручную проверить эти EditText поля.

Редактировать: Новая библиотека Android DataBinding лучше всего подходит для этой цели.

0 голосов
/ 07 мая 2019

Рассмотрим этот случай только для 2 EditTexts, как и сейчас.определите 2 глобальных CharSequence, как показано ниже

CharSequence fName="";
CharSequence lName="";
Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_profile);

        fnameInput = findViewById(R.id.et_firstname);
        lnameInput = findViewById(R.id.et_lastname);
        numberInput = findViewById(R.id.et_phone);
        emailInput = findViewById(R.id.et_email);
        nextBtn = findViewById(R.id.btn_next);

        fnameInput.addTextChangedListener(textWatcher);
        lnameInput.addTextChangedListener(textWatcher2);


        nextBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                launchNextActivity();
            }
        });
    }

, затем вы должны определить разные текстовые наблюдатели для каждого из ваших Edittext

, а затем внутри каждого из этих textWatcher назначить значения для CharSequence, определенные выше

private TextWatcher textWatcher = 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) {

      fName=s;
      validate();  //method to enable or disable button (find method below)

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

теперь textWatcher2

private TextWatcher textWatcher2 = 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) {

      lName=s;
      validate();  //method to enable or disable button (find method below)

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

теперь напишите метод проверки

void validate(){
        if (fName.length()>0 && lName.length()>0){
            nextBtn.setEnabled(true);

        }else {
            nextBtn.setEnabled(false);

        }
    }
0 голосов
/ 03 мая 2019

создайте метод, проверьте все условия там как

private void checkTheConditions(){
  if(condition1 && condition2)
  nextBtn.setEnabled(true)
  else
  nextBtn.setEnabled(false)
}

вызовите этот метод из afterTextChanged(Editable s) метод

...