如何解决即使我已经完全清除了文本字段,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);
}
}
}
}
});
享受吧!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。