代码之家  ›  专栏  ›  技术社区  ›  Shakil

当两个EditText字段至少有一个字符输入(Android)时启用按钮

  •  1
  • Shakil  · 技术社区  · 8 年前

    我创建的类允许按钮在任何一个字段中输入。如何修改它,以便只有当用户在两个EditText字段中输入内容时,才启用该按钮。

        class BtnEnabler(){
            constructor(type:EditText, btn:Button):this(){
                btn.isEnabled = false
                type.addTextChangedListener(object : TextWatcher {
                    override fun afterTextChanged(p0: Editable?) {
                    }
                    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                    }
                    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                    }
                })
                fun EditText.afterTextChanged(afterTextChanged: (String) -> Unit) {
                    this.addTextChangedListener(object : TextWatcher {
                        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                        }
                        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                        }
                        override fun afterTextChanged(editable: Editable?) {
                            afterTextChanged.invoke(editable.toString())
                        }
                    })
                }
                type.afterTextChanged {btn.isEnabled = true}
            }
        }
        BtnEnabler(byear, sub_btn)
        BtnEnabler(bday, sub_btn)
    

    此外,当用户删除所有输入文本时,是否可以再次禁用该按钮?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Khemraj Sharma    8 年前
     EditText editText1;
        EditText editText2;
        Button button;
    
        private void init() {
            // TODO: 5/18/2018 consider findViewById first 
            editText1.addTextChangedListener(textWatcher);
            editText2.addTextChangedListener(textWatcher);
        }
    
        private String getText(TextView textView) {
            return textView.getText().toString().trim();
        }
    
        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) {
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                button.setEnabled(getText(editText1).length() > 0 && getText(editText2).length() > 0);
            }
        };
    

    我希望你能把它改成kotlin。