Кнопка включается только когда текст заполнен и кнопка отмечена - PullRequest
0 голосов
/ 16 февраля 2019

Я в основном настраиваю деятельность по сбору информации.У него есть радиогруппа для выбора пола и редактирования текстов для имени и возраста.

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

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

    nameTxt = findViewById(R.id.name);
    ageTxt = findViewById(R.id.age);
    nextBtn = findViewById(R.id.next);
    nextBtn.setEnabled(false);
    gender = findViewById(R.id.gender);

    nameTxt.addTextChangedListener(watcher);
    ageTxt.addTextChangedListener(watcher);

    gender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            onChecked = true;
        }
    });
}

private final 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) {
        if (nameTxt.getText().toString().length() == 0 || ageTxt.getText().toString().length() == 0 || onChecked == false) {
            nextBtn.setEnabled(false);
        } else {
            nextBtn.setEnabled(true);
        }
    }
};

Я ожидал, что оба слушателя будут работать независимо (что выполнение в любом порядке дасттот же результат).Я могу ошибаться, поскольку я относительно новичок в Android Studio.

1 Ответ

0 голосов
/ 16 февраля 2019
gender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        onChecked = true;
        validateNext();
    }
});


private final 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) {
        validateNext();
    }

    @Override
    public void afterTextChanged(Editable s) {}
};

private void validateNext() {
    if (TextUtils.isEmpty(nameTxt.getText().toString().trim())
         || TextUtils.isEmpty(ageTxt.getText().toString().trim())
         || onChecked == false) {
        nextBtn.setEnabled(false);
    } else {
        nextBtn.setEnabled(true);
    }
}
...