输入文本的第一个字符总是被 TextWatcher 读取,即使我已经完全清除了我的文本字段

First character of the input text is always read by TextWatcher even when I've cleared my textfield completely

我想做的是,在意图的帮助下调用另一个 activity,当且仅当我的 edittext 字段 name 不为空时。

我的代码:

Intent intent = new Intent(this, contacts.class);
        name.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

            }

            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {

            }

            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) {
                String text=name.getText().toString().trim();
                if(!text.isEmpty()) {
                    //println(s.toString());
                    Log.d("name",text.toString());
                    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(RadioGroup group, int checkedId) {
                            // checkedId is the RadioButton selected
                            RadioButton rb = (RadioButton) findViewById(checkedId);

                            if (checkedId != -1) {
                                if (rb.getText() == "custom") {
                                    intent.putExtra("FLAG", flag);
                                    startActivity(intent);
                                } else {
                                    flag = false;
                                    intent.putExtra("FLAG", flag);
                                    startActivity(intent);
                                }
                            }
                        }
                    });
                }
                else{
                    //println(s.toString());
                    Log.d("name",text.toString());
                    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Please type your name", Snackbar.LENGTH_LONG);
                    snackbar.show();
                }


            }
        });

当我 运行 代码时,在我的编辑文本字段 (name) 中输入内容然后将其完全删除后,仍然允许 intent 调用新的 activity,这让我很困惑。

所以,我在 Logcat 的帮助下开始调试它,发现我输入的第一个字符实际上从未被删除,但 TextWatcher 可以读取。

例如:假设我在我的文本字段中写 Hello,那么我的 Logcat 就像

H
He
Hel
Hell
Hello

这很好。但是,当我开始清除文本时,问题就出现了。字符被删除,如:

Hell
Hel
He
H

即使我的 edittext 字段完全为空,字符串的第一个字符 (H) 仍会被 TextWatcher 读取。为什么?

目前,当您单击两个 RadioButton 之一时触发您的意图的代码,因此当您实际编写内容时,您只是为该单选按钮设置了一个侦听器,让我告诉你,你编辑文本实际上是空的, logcat 向您显示 EditText 字段中存在的最后一个字母 H ,在 H 之后它是空的,因此 logcat !

中没有要打印的内容

如果您尝试在不触摸 EditText 的情况下单击单选按钮,您就会明白我的意思,它不会触发意图,但如果您只写一个字母,那么单选点击侦听器将注册并准备触发意图 !

现在我会告诉你你必须做什么,第一个 EditText 监听器:

Intent intent = new Intent(this, contacts.class);

然后设置单选按钮点击:

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(!TextUtils.isEmpty(name.getText.toString())){
                // checkedId is the RadioButton selected
                RadioButton rb = (RadioButton) findViewById(checkedId);
                      if (checkedId != -1) {
                           if (rb.getText() == "custom") {
                              intent.putExtra("FLAG", flag);
                              startActivity(intent);
                           } else {
                              flag = false;
                              intent.putExtra("FLAG", flag);
                              startActivity(intent);
                          }
                      }
            }
       }
});

尽情享受吧!