通过监听器检查EditText是否为空

问题描述 投票:0回答:5

我知道有几个答案,但似乎没有一个能解决我的问题:

我有以下代码:

   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

我做错了什么??

android android-edittext onclicklistener
5个回答
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有用)


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


2
投票

你应该将 if 条件放在 afterTextChanged 函数中。像这样:

@Override
public void afterTextChanged(Editable s) {
    Log.d("", "afterTextChanged —>"+s.getText().toString());
    if(TextUtils.isEmpty(s.getText().toString()){
        //here to do stuff
    }
}

0
投票

我在我的系统上尝试了你的代码,它有效

  • 你不需要两者都

            Log.i("Ram = ", myEditTExt.getText().toString());
            Log.i("Ram = ", s.toString());
    

1个都可以

正如@Rakshit Nawani 建议使用不同的标签..应该有效


0
投票

检查 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) {


            }
        });

仅此而已...祝您编码愉快...

© www.soinside.com 2019 - 2024. All rights reserved.