【问题标题】:Button only enable when texts are filled and button checked仅在填充文本并选中按钮时启用按钮
【发布时间】:2019-02-16 19:29:33
【问题描述】:

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

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

【问题讨论】:

    标签: android button radio-group oncheckedchanged


    【解决方案1】:
    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 2021-02-12
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多