输入文本的第一个字符总是被 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);
}
}
}
}
});
尽情享受吧!
我想做的是,在意图的帮助下调用另一个 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);
}
}
}
}
});
尽情享受吧!