按钮仅在填充文本并选中按钮时启用

Button only enable when texts are filled and button checked

我基本上是在设置信息收集 activity。它有一个用于性别选择和编辑姓名和年龄文本的无线电组。

我已经实现了单选组的 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 比较陌生。

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