Android TextWather对象。 java匿名类是如何工作的?

时间:2014-05-08 04:41:10

标签: java android object textwatcher

private TextWatcher billEditTextWatcher = new TextWatcher() 
   {
      // called when the user enters a number
      @Override
      public void onTextChanged(CharSequence s, int start, 
         int before, int count) 
      {         
         // convert billEditText's text to a double
         try
         {
            currentBillTotal = Double.parseDouble(s.toString());
         } // end try
         catch (NumberFormatException e)
         {
            currentBillTotal = 0.0; // default if an exception occurs
         } // end catch 

         // update the standard and custom tip EditTexts
         updateStandard(); // update the 10, 15 and 20% EditTexts
         updateCustom(); // update the custom tip EditTexts
      } // end method onTextChanged

      @Override
      public void afterTextChanged(Editable s) 
      {
      } // end method afterTextChanged

      @Override
      public void beforeTextChanged(CharSequence s, int start, int count,
         int after) 
      {
      } // end method beforeTextChanged
   }; // end billEditTextWatcher

这是来自专业人士编写的小费计算器应用程序的代码段。谁能解释一下这是如何工作的?

通常我只需编写以下内容即可创建新对象。

TextWatcher billEditTextWatcher = new TextWatcher();

我理解私人所做的事。但是如何创建新对象的方法呢?它基本上是按照它说的做的吗?覆盖TextWatcher类中的原始方法?

我希望这个问题有道理,因为我很安静。

提前致谢!

2 个答案:

答案 0 :(得分:3)

这是Java中匿名类的示例。您没有任何TextWatcher java文件,并在初始化时声明了该类的内容。

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

答案 1 :(得分:1)

正如名称所示,TextWatcher将感知EditText

的所有事件

就像你在可编辑区域写东西一样。

它有以下回调(观察状态。)

  1. 按键 - beforeTextChanged();
  2. 按键 - afterTextChanged();
  3. 文字更改 - onTextChanged();
  4. 所有回调方法都包含由事件生成器传递的相关数据。按键是按键,键等的Unicode(ASCII)。

    基本上, TextWatcher 用于在向其中输入数据时监视 EditText 或MultiLine EditText 。我们可以执行操作并密切关注输入的字符数或 EditText 中输入的字符数。

    技术说明:

    1. 如果您想使用TextWatcher,则需要使用EditText对象取消TextWather。{/ li>

      e.g。

      EditText editTextPassword;  // Some EditText object.
      
      TextWatcher billEditTextWatcher = new TextWatcher();  // TextWather object creation
      
      editTextPassword.addTextChangedListener(billEditTextWatcher );  // EditText registation with Textwather object.
      
      1. 默认情况下,TextWather的所有回调都是空的,这就是为什么你需要根据你的要求给出你所有回调的定义。

        private TextWatcher billEditTextWatcher = new TextWatcher() 
         {
        
          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) 
          {         
        
              // you code is here while onTextChanged.
        
          } 
        
          @Override
          public void afterTextChanged(Editable s) 
          {
        
              you code is here while afterTextChanged.
        
          } 
        
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count,
             int after) 
          {
        
             // you code is here while beforeTextChanged.
        
          } 
        };