我知道有几个答案,但似乎没有一个能解决我的问题:
我有以下代码:
myEditText.addTextChangedListener(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) {
Log.i("Ram = ", myEditTExt.getText().toString());
Log.i("Ram = ", s.toString());
}
@Override
public void afterTextChanged(Editable s) {
Log.i("Ram = ", myEditTExt.getText().toString());
Log.i("Ram = ", s.toString());
}
});
当文本完全为空时,onTextChanged 或 afterTextChanged 显示都不会被调用。示例运行 - 无论我调用方法 onTextChanged 还是 afterTextChanged,情况都是相同的。
文本框以 25.0 的值开始,我单击它并一次删除一个字符,这是日志上的输出
请注意,我只输入了 1 条语句 - 为了清楚地说明我所尝试的内容,我已经编写了所有 4 条语句,但是 4 条语句中的任何一条都只给出了以下输出:
04-11 17:24:37.661 11221-11221/zooter.com.cal I/Ram =: 25.
04-11 17:24:39.493 11221-11221/zooter.com.cal I/Ram =: 25
04-11 17:24:41.198 11221-11221/zooter.com.cal I/Ram =: 2
我做错了什么??
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().length() == 0) {
Log.i("Ram = ", "Empty");
Log.i("Ram = ", "");
}
Log.i("Ram = ", myEditText.getText().toString());
Log.i("Ram = ", s.toString());
}
如果日志消息为空,android.util.Log 将不起作用。 (如果条件不起作用,请参阅内部的第二个日志调用)。 但我认为您没有正确使用该标签。我建议执行以下操作:
private static final String TAG = "RAM";
...
myEditText.addTextChangedListener(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) {
Log.i(TAG, "Ram: " + s.toString());
}
@Override
public void afterTextChanged(Editable s) {
Log.i(TAG, "Ram: " + s.toString());
}
});
或者将TAG设置为Activity名称(实际上TAG只对过滤logcat有用)
用你的 myEditText 试试这个
myEditText.addTextChangedListener(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) {
System.out.println(">>>>>" + s.toString().length());
if(s.toString().length()==0){
//DO Stuff Here
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
输出如下
I/System.out:>>>>>1
I/System.out:>>>>>2
I/System.out:>>>>>3
I/System.out:>>>>4
I/System.out:>>>>>5
I/System.out﹕>>>>>6
I/System.out﹕>>>>>7
I/System.out﹕>>>>>8
I/System.out:>>>>>9
I/System.out:>>>>>10
I/System.out:>>>>>11
I/System.out:>>>>>10
I/System.out:>>>>>9
I/System.out﹕>>>>>8
I/System.out﹕>>>>>7
I/System.out﹕>>>>>6
I/System.out:>>>>>5
I/System.out:>>>>4
I/System.out:>>>>>3
I/System.out:>>>>>2
I/System.out:>>>>>1
I/System.out:>>>>>0
你应该将 if 条件放在 afterTextChanged 函数中。像这样:
@Override
public void afterTextChanged(Editable s) {
Log.d("", "afterTextChanged —>"+s.getText().toString());
if(TextUtils.isEmpty(s.getText().toString()){
//here to do stuff
}
}
我在我的系统上尝试了你的代码,它有效
你不需要两者都
Log.i("Ram = ", myEditTExt.getText().toString());
Log.i("Ram = ", s.toString());
1个都可以
正如@Rakshit Nawani 建议使用不同的标签..应该有效
检查 TextChanged 的条件
edit_cellphone.addTextChangedListener(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) {
if (s.toString().length() == 0) {
Log.d("TAG", "onTextChanged: "+"empty");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
仅此而已...祝您编码愉快...