2012-06-02 25 views
11

Necesito reemplazar el texto dentro de EditText mientras escribo: Ejemplo: si el usuario presiona "A", se almacenará en un búfer y en su lugar se mostrará "D" en EditText (se ve como presionó "D"). Ahora puede leer el carácter presionado pero no puede mostrar cualquier carácter en el et de evitar stackoverflow:EditText - cambiar texto mientras escribes

final EditText et = (EditText) findViewById(R.id.editTexts); 
    final TextView tv = (TextView) findViewById(R.id.textView2); 

    et.addTextChangedListener(new TextWatcher() 
    { 
      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) { 
       if(s.length() > 0) { 
        tv.setText(s.toString().substring(s.length()-1)); 
        et.setText(""); 
       } 
      } 
    }); 
+0

ver este ................... ....... http://stackoverflow.com/questions/9498155/android-java-update-same-edittext-in-textchanged-event –

+0

prueba s.clear(); después de establecer s a su textView – Pradeep

+1

misma pregunta dos veces http://stackoverflow.com/questions/10862343/access-edittext-from-textwatcher#10862398 – Ishu

Respuesta

22

Usted puede cambiar según sea necesario ::

public class SampleActivity extends Activity { 
    TextWatcher tt = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final EditText et = (EditText) findViewById(R.id.editText1); 
     final TextView tv = (TextView) findViewById(R.id.textView1); 
     tt = new TextWatcher() { 
      public void afterTextChanged(Editable s){ 
       et.setSelection(s.length()); 
      } 
      public void beforeTextChanged(CharSequence s,int start,int count, int after){} 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       et.removeTextChangedListener(tt); 
       et.setText(et.getText().toString().replace("A", "C")); 
       et.addTextChangedListener(tt); 
      } 
     }; 
     et.addTextChangedListener(tt); 
    } 
} 
+0

y reemplaza "a" con "c" pero se invierte agrega caracteres al comienzo del campo –

+1

Quizás necesite un ET.setSelection (s.length()); algun lado !! –

7

Para cambiar el texto de forma interactiva, debe registrar un TextWatcher. Pero tratar de cambiar el texto dentro del observador crea más llamadas al observador. Mi truco es quitar temporalmente el observador cuando quiero cambiar el texto y volver a registrar justo después

mEditText.addTextChangedListener(new TextWatcher() { 
     @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void afterTextChanged(Editable editable) { 
      mEditText.removeTextChangedListener(this); 
      mEditText.setText(//TODO change whatever you like here); 
      mEditText.setSelection(editable.length()); //moves the pointer to end 
      mEditText.addTextChangedListener(this); 
     } 
Cuestiones relacionadas