【问题标题】:Button not disabling if text missing in edittext如果edittext中缺少文本,按钮不会禁用
【发布时间】:2017-07-13 18:07:59
【问题描述】:

谁能告诉我为什么当edittext中的文本为空时我的按钮没有被禁用?我已经尝试了很多方法,但它从来没有奏效!这是我手头的简化代码。

代码:

public class MapStartActivity extends FragmentActivity {

    EditText mapName;
    Button NextPageStart;


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

        @Override
        public void afterTextChanged(Editable s) {

        }
    };

    private void checkFieldsForEmptyValues(){
        String s1 = mapName.getText().toString();

        if (s1.trim().isEmpty()) {
            NextPageStart.setEnabled(true);
        } else {
            NextPageStart.setEnabled(false);
            NextPageStart.setAlpha(.5f);
        }

    }

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

        NextPageStart = (Button) findViewById(R.id.NextStatLocBut);
        mapName = (EditText) findViewById(R.id.MapNameText);


        //Click Listener for button
        NextPageStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mapName.addTextChangedListener(textWatcher);

            }
        });
    }
}

【问题讨论】:

  • 最初禁用按钮,因为 EditText 将为空。根据您的代码,如果您的 Edittext 为空,则您的按钮已启用,根据您的问题 if (s1.trim().isEmpty()){}

标签: java android android-edittext android-button


【解决方案1】:

像这样在点击监听器之外添加文本监听器

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

        NextPageStart = (Button) findViewById(R.id.NextStatLocBut);
        mapName = (EditText) findViewById(R.id.MapNameText);

        // To disable the button intially
        NextPageStart.setEnabled(false);

        mapName.addTextChangedListener(textWatcher);

        //Click Listener for button
        NextPageStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // You can do some click action here

            }
        });
    }

【讨论】:

  • 这已经对问题进行了半分类,下一个问题是它没有在加载时执行此操作。当您添加文本然后删除它时,它可以工作,但如果您立即单击按钮,它仍然允许您进入下一个活动。
  • 那么它应该发生什么..?
  • 因此,当活动启动时,按钮不应该是可点击的,直到编辑文本中有文本。当有文本时,可以单击按钮。当前,当页面加载时,按钮会立即单击并打开一个新活动。只有在edittext中有文本时才会发生这种情况
【解决方案2】:

在您的代码中仅更改以下几行

 @Override
    public void afterTextChanged(Editable s) {
        String textFromEditText = mapName.getText();
        if(TextUtils.isEmpty(textFromEditText)){
            NextPageStart.setEnabled(false);
         } else{
             NextPageStart.setEnabled(true);
         }
    }

【讨论】:

    【解决方案3】:

    我不知道为什么它不适合你,但我想它应该可以正常工作。但你应该先了解命名约定。

    【讨论】:

    • 非常有建设性的意见!
    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多