通过侦听器检查 EditText 是否为空
Checking if EditText is empty via listener
我知道有几个答案,但 none 似乎解决了我的问题:
我有以下代码:
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,情况都是一样的。
TextBox 以值 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
我做错了什么??
用你的 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 function.Like 这个:
@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 建议的那样,使用不同的标签.. 应该有效
@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)
我知道有几个答案,但 none 似乎解决了我的问题:
我有以下代码:
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,情况都是一样的。
TextBox 以值 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
我做错了什么??
用你的 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 function.Like 这个:
@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 建议的那样,使用不同的标签.. 应该有效
@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)