通过侦听器检查 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)