【问题标题】:If statment only checks one timeif 语句只检查一次
【发布时间】:2019-01-12 09:12:36
【问题描述】:

我希望我的 btnsave 仅在 editText 中有内容时才能工作。 首先,当应用程序启动时,当editText 中没有任何内容时,我的代码有效(btnsave 无效)。但是当我在editText 中输入内容时,我希望btnsave 能够工作。但不是!它不起作用。我认为 if 语句只运行一次。

有什么问题? 我希望此代码在应用程序运行时永久运行。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnSave = (Button) findViewById(R.id.btnSave);
    editText = (EditText) findViewById(R.id.editText);

    if (!editText.getText().toString().matches(""))
        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"H", Toast.LENGTH_SHORT).show();
            }
        });

}

换句话说

btnAdd = (Button) findViewById(R.id.btnAdd);
editText = (EditText) findViewById(R.id.editText);

if (editText.getText().toString().matches(""))
    btnAdd.setEnabled(false);
else
    btnAdd.setEnabled(true);

当应用程序启动时,btn 被禁用(因为editText 为空)但是当我在editText 中键入文本时,预计 btn 会启用,但它没有!

我认为当我在editText 中输入某物时,它不会重新检查条件。为什么?

【问题讨论】:

    标签: java android if-statement button android-edittext


    【解决方案1】:
    editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    if (charSequence.toString().trim().length() > 0)  {
                        btnAdd.setEnabled(false);
                    } else {
                        btnAdd.setEnabled(true);
                    }
                }
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
                }
    
                @Override
                public void afterTextChanged(Editable editable) {
    
                }
            });
    

    【讨论】:

    • 是的,它可以工作,但我不是那个意思。我的问题是:例如,我希望当我在 editText 中键入某事以及删除我在 editText 中键入的内容时启用一个按钮被禁用。我的问题是如何编码?
    • 试试 EditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { if (charSequence.toString().trim().length () > 0) { Button.setEnabled(true); } else { Button.setEnabled(false); } }});
    • 根据您的编辑文本名称将此侦听器附加到您的编辑文本。
    【解决方案2】:

    你应该遵循以下逻辑:

    1. 创建并实现 onClickListener。
    2. 指定条件语句。
    3. 执行操作。

    下面的sn-p应该可以满足你的需求:

    btn.setOnClickListener(newView.OnClickListener() {
        @Override
        public void onClick(View view){
        if(!editText.getText().toString().matches("")){
            Toast.makeText(MainActivity.this, "H", Toast.LENGTH_SHORT).show();
        }
    });
    

    如果您想让您的按钮在 EditText 中有文本时可用,而不是在没有文本时可用,您可以使用以下属性:

    btn.setClickable(true);
    

    只需在条件语句中使用这一行。

    【讨论】:

    • 是的,它可以工作,但我不是那个意思。我的问题是:例如,我希望当我在 editText 中键入某事以及删除我在 editText 中键入的内容时启用一个按钮被禁用。我的问题是如何编码?
    • 哦,明白了。检查 sn-p 的变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2021-09-12
    相关资源
    最近更新 更多