如何在EditText上应用Textchange事件

问题描述 投票:26回答:7

我开发了一个简单的应用,例如减法,加法。在此应用程序中,我使用三个EditText,一个用于回答,另两个用于提问。我想计算有关文本更改事件的问题的答案。但是,当我同时将文本更改事件应用于这两个事件时,该事件会发生,但不能正常工作。因为当我在问题的第一个EditText中输入文本时,会发生该事件,但会引发此异常:

07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event java.lang.NumberFormatException: unable to parse '' as integer

我该怎么办?我将TextWatcher用于文本更改事件。

txtOne.addTextChangedListener(this);
txtTwo.addTextChangedListener(this);

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) {}  
android android-edittext textwatcher
7个回答
45
投票

我认为您收到的空字符串" "引起了此问题。确保从EditText中获取非空字符串。

考虑您的EditText没有输入任何值,并且您试图获取它的值并将其转换为int,您将遇到这种问题。

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
            if(!s.equals("") ) { 
                //do your work here 
            }
    }



    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    public void afterTextChanged(Editable s) {

    }
});

也请查看此链接以获取更多想法,

https://stackoverflow.com/a/3377648/603744


2
投票

我认为最好的情况是edittext类型是数字...使用参数的(长度函数)而不是(equle()函数)例如:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (s.length() > 0)
                { //do your work here }
        }

    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    public void afterTextChanged(Editable s) {

    }
});

1
投票

我使用了它,这是正确的:

public void afterTextChanged(Editable arg0) {
    String inputs = input.getText().toString();
    Integer index=0;
    if(!inputs.equals("")) 
        index=Integer.valueOf(inputs);

}

0
投票

我认为您需要先检查editText值是否为空或不是。像这样的东西:

String textValue;
textValue = edittext().getText().toString());
Log.v("","Value is " + textValue);
if(textValue != ""){
   // Call Text Change Listener Here
}else{
   // Throw error message or something
}

希望有帮助。


0
投票

已添加Kotlin实现,以供将来参考

 webUrl.editText!!.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                var urlToload: String
                if (s ==null || s.isEmpty()) {
                    urlToload = UniversalWebViewFragment.YOUTUBE_SERACH_URL + "hd trailers"
                } else {
                    urlToload = UniversalWebViewFragment.GOOGLE_SERACH_URL + s.toString()
                }

                loadURL(urlToload)
            }

        })

0
投票

我有相同的问题,并且通过以下两个操作解决了该问题:1-android:inputType =“ textNoSuggestions”(它本身并不能解决问题)2-添加侦听器:

edittext1.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before,
            int count) {

                Log.e("JFT", "EDITTEXT => = "+s);
                if(!s.equals("") ) {
                    //do your work here
                }
            }



            public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

            }

            public void afterTextChanged(Editable s) {

            }
        });

0
投票

对于Kotlin,请使用下面的代码

edit1.addTextChangedListener(object : TextWatcher {
   override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
       if (edit1.text.toString().length == 1) {
             edit2.requestFocus()
       }
   }

   override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int
   ) {// TODO Auto-generated method stub
   }

   override fun afterTextChanged(s: Editable) {}
})
© www.soinside.com 2019 - 2024. All rights reserved.