title: android TextWatcher changing outerclass private field
body: <p>I have multiple String variables and EditText variables in my MainFragment. And for all the EditText, I want my String variables to get assigend the values after EditText's text changed. Currently this is how I do it:</p>
  
  <pre><code>private String itemName;
  private String itemNumber;
  private EditText itemNameET;
  private EditText itemNumberET;
  private void initEditTexts() {
      itemName = itemNameET.getText().toString();
      itemNumber = itemNumberET.getText().toString();
      itemNameET.addTextChangedListener(new TextWatcher() {
          @Override
          public void afterTextChanged(Editable s) {
              itemName = (String) s.toString();
          }
  
          @Override
          public void beforeTextChanged(CharSequence arg0, int arg1,
              int arg2, int arg3) {}
  
          @Override
          public void onTextChanged(CharSequence s, int start, int before,
              int count) {}
  
      });
  
      itemNumberET.addTextChangedListener(new TextWatcher() {
          @Override
          public void afterTextChanged(Editable s) {
              itemNumber = (String) s.toString();
          }
  
          @Override
          public void beforeTextChanged(CharSequence arg0, int arg1,
              int arg2, int arg3) {}
  
          @Override
          public void onTextChanged(CharSequence s, int start, int before,
              int count) {}
  
      });
  </code></pre>
  
  <p>I want to try remove the redundant code since I have a lot of EditTexts in the Activity. I was thinking of going along with create a CustomTextWatcher:</p>
  
  <pre><code>public class CustomTextWatcher implements TextWatcher {
      private String text;
      public CustomTextWatcher(String text) {
          this.text = text;
      }
  
      @Override
      public void afterTextChanged(Editable s) {
          text = (String) s.toString();
      }
  
      @Override
      public void beforeTextChanged(CharSequence arg0, int arg1,
          int arg2, int arg3) {}
  
      @Override
      public void onTextChanged(CharSequence s, int start, int before,
          int count) {}
  }
  </code></pre>
  
  <p>But then this won't work because the outerclass variable is still not assigned the new value, since it is pass-by-value. How will I do something in Java that has the pass-by-reference effect, or what other ways I can do to pass the outerclass variable to the innerclass and that variable can get updated in innerclass?</p>