如何在EditText上应用Textchange事件

时间:2012-07-03 11:12:15

标签: android android-edittext textwatcher

我开发了一个简单的应用程序,如减法,添加。 在这个应用程序中,我使用三个EditTexts,一个用于回答,另外两个用于提问。 我想计算文本更改事件的问题答案。但是当我对这两个应用文本更改事件时,事件发生但不正常工作。因为当我在问题的第一个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) {}  

7 个答案:

答案 0 :(得分:43)

我认为您收到空字符串" ",这会导致此问题。确保从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

答案 1 :(得分:2)

我认为编辑文本类型为数字时最好...使用参数的(长度函数)  而不是(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) {

    }
});

答案 2 :(得分:1)

我用过这个,这是正确的:

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

}

答案 3 :(得分: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
}

希望它有所帮助。

答案 4 :(得分: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)
            }

        })

答案 5 :(得分: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) {

            }
        });

答案 6 :(得分: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) {}
})