title: TextChanged Listener
body: <p>I am still new to Android development and what I want to do is create a  listener that will contain two TextView objects which hold the area and perimeter.  The width and height are EditText objects.  After I have entered the width and height, the values for perimeter and area should be shown in real-time based on the calcArea and calcPerimeter methods.  The code that I used for the listener is based off an example I found on here.  My code:      </p>
  
  <pre><code>    package com.jtryon.rectanglecalc;
  
      import android.support.v7.app.ActionBarActivity;
      import android.support.v7.app.ActionBar;
      import android.support.v4.app.Fragment;
      import android.text.Editable;
      import android.text.TextWatcher;
      import android.os.Bundle;
      import android.view.LayoutInflater;
      import android.view.Menu;
      import android.view.MenuItem;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.EditText;
      import android.widget.TextView;
      import android.os.Build;
  
      public class MainActivity extends ActionBarActivity {
  
          // fields in the class
          // variables that are global to this file   
          double width;
          double height;
          double area;
          double perimeter;
  
          // "handles" to the objects from the XML
          EditText widthEdit;
          EditText heightEdit;
          TextView areaText;
          TextView perimText;
  
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
  
              // set up handles
              widthEdit = (EditText)findViewById(R.id.width_edit);
              heightEdit = (EditText)findViewById(R.id.height_edit);
              areaText = (TextView)findViewById(R.id.area_value);
              perimText = (TextView)findViewById(R.id.perim_value);
  
              widthEdit.addTextChangedListener(
                      new TextWatcher() {
  
                          @Override
                          public void afterTextChanged(Editable arg0) {
                              // TODO Auto-generated method stub
  
                              // read the width out of widthEdit
                              String widthString = widthEdit.getText().toString();
  
                              // convert the String into a double
                              if (widthString.length() &gt; 0) {
                                  width = Double.parseDouble(widthString);
                              }
  
                              // read the height out of heightEdit
                              String heightString = heightEdit.getText().toString();
  
                              if (heightString.length() &gt; 0) {
                                  height = Double.parseDouble(heightString);
                              }
  
  
                              // calculate area
                              double area = calcArea();
  
                          // calculate perimeter
                          double perim = calcPerim();
  
                          // set the label for areaText
                          areaText.setText(Double.toString(area));
  
                          // set the label for perimText  
                          perimText.setText(Double.toString(perim));
  
                      }
  
                      @Override
                      public void beforeTextChanged(CharSequence s, int start,
                              int count, int after) {
                          // TODO Auto-generated method stub
  
                      }
  
                      @Override
                      public void onTextChanged(CharSequence s, int start,
                              int before, int count) {
                          // TODO Auto-generated method stub
  
                      }
                  }
          );
      }
  
      double calcArea() 
      {
          return width * height;
      }
  
      double calcPerim()
      {
          return 2 * width * height;
      }
  }
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/cDvIt.png" alt="User interface"></p>