即使我已经完全清除了文本字段,TextWatcher 也始终会读取输入文本的第一个字符

问题描述

我想要做的是,在意图的帮助下调用一个活动,当且仅当我的 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 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) 中输入一些内容然后将其完全删除后,仍然允许意图调用新活动,这让我感到困惑。

因此,我在 Logcat 的帮助下开始对此进行调试,并发现我提供的输入的第一个字符实际上从未被删除并且可以被 TextWatcher 读取。

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

H
He
Hel
Hell
Hello

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

Hell
Hel
He
H

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

解决方法

目前触发你的意图的代码是当你点击两个 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);
                          }
                      }
            }
       }
});

享受吧!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...