【问题标题】:How to Apply the Textchange event on EditText如何在 EditText 上应用 Textchange 事件
【发布时间】:2012-07-03 19:32:09
【问题描述】:

我开发了一个简单的应用程序,例如减法、加法。 在这个应用程序中,我使用了三个 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


    【解决方案1】:

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

    【讨论】:

    • 试试这个 - if(!s.equals('')) ,因为我们得到的是 CharSequence
    • 使用 StringUtils.isEmpty 而不是 s.equals("")。效率更高。
    • 对我来说 s 从不等于空字符串 ("")。
    【解决方案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) {
    
        }
    });
    

    【讨论】:

      【解决方案3】:

      我用过这个,没错:

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

      【讨论】:

      • 看起来与其他答案没有什么不同,是吗 ;-) 如果字段内容不可解析,仍然会抛出 ParseException。
      【解决方案4】:

      我认为您需要先检查您的 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
      }
      

      希望对你有所帮助。

      【讨论】:

      • 那日志猫怎么说?
      【解决方案5】:

      添加了 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)
                  }
      
              })
      

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题,通过以下 2 个操作解决了问题:
        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) {
        
                    }
                });
        

        【讨论】:

          【解决方案7】:

          对于 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) {}
          })
          

          【讨论】:

            猜你喜欢
            • 2012-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多