2011-01-25 6 views
8

Estoy tratando de borrar un campo EditText de líneas múltiples dentro del método OnEditorActionListener.onEditorAction.Borrado de una línea múltiple EditText

Pero el uso de cualquiera de las maneras más obvias es decir

((EditText) view).getEditableText().clear(); 
((EditText) view).getEditableText().clearSpans(); 
((EditText) view).setText(""); 

sólo borra los caracteres visibles - dejando a los saltos de línea en los campo (que luego tienen que ser eliminado manualmente).

¿Hay manera de borrar "completamente" un campo EditText multilínea? (O por lo menos - ¿Alguien sabe por qué el anterior funciona?)

+0

Resuelto (en un minuto después de una buena noche de descanso): la línea nueva se agregaba después de borrar el texto porque la implementación del método onEditorAction era falsa (por otros motivos). Devolver 'verdadero' indica que 'enter' ha sido procesado/consumido y clear() se comporta como se esperaba. – tonys

+1

debe agregar lo anterior como una respuesta y luego aceptarlo, preferiblemente con una buena muestra de código de trabajo :-) –

+0

@ dave.c. Hecho :-) – tonys

Respuesta

7

Resuelto (en un minuto después de una buena noche de descanso): se agregó la nueva línea después de borrar el texto porque la implementación del método onEditorAction estaba devolviendo false (por otros motivos).

Volviendo true indica que el 'Enter' ha sido procesada/consumida y la clara() se comporta como se esperaba:

edittext.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView view,int actionId,KeyEvent event) { 
      post(view.getText().toString()); 

      ((EditText) view).getEditableText().clear(); 

      return true; 
     } 
    }); 
0

no tengo un IDE aquí para probar, pero que podría darle una oportunidad:

  • ((EditText) view).clearComposingText() Es una heredar el método de TextView
  • No tan elegante, pero tal vez funcional: setSingleLine =true y luego false nuevamente. Que puede resultar útil hasta que alguien puede ofrecer algo mejor ...
+0

Por curiosidad (ver comentario a la pregunta original) Intenté esto pero no pareció funcionar. – tonys

0

Hay un camino con setMaxLines:

yourEditText.getEditableText().clear(); 
yourEditText.setMaxLines(1); 
+0

Solo para el registro (ver comentario a la pregunta original) Intenté esto pero no pareció funcionar. – tonys

+1

@tonys: esto es extraño porque funcionó para mí. Configuré una actividad simple con un texto de edición y un botón. Empecé a escribir algo de texto haciendo que el texto de edición sea multilínea. Luego, con el botón, llamé a las dos líneas de arriba y el texto de edición se borró por completo. – gulbrandr

+0

Supongo que su implementación onEditorAction (...) ha sido verdadera, en cuyo caso getEditableText(). Clear() funciona bien. – tonys

0

Tal vez me siento un poco demasiado suerte, pero:

((EditText) view).setText(null); 
+1

Me sorprendería si esto funciona, ya que lo primero que hace 'setText (texto de CharSequence, tipo BufferType, boolean notifyBefore, int oldlen)' (que finalmente es llamado por 'setText (CharSequence text)') es verificar 'null' y reemplazar con un' String' vacío. Ver el [código fuente] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/TextView.java#2559).Si funciona, me encantaría saber por qué. –

+0

no funciona (ya lo había intentado) – tonys

+0

jeje :-) Perdón por el optimismo juvenil, pero a veces me doy cuenta de que estoy tan ocupado encontrando la "raíz del mal" que simplemente no controlo las cosas más simples (que, por supuesto, casi siempre es exactamente lo que resuelve mi problema) :-) En este caso, en realidad no fue tan fácil (al igual que @ dave.c mencionado anteriormente). – dbm

0

He utilizado este cuando tuve un botón claro en mi aplicación

  Button clearButton = (Button)findViewById(R.id.clear); 

    clearButton.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View v) { 

      number = (EditText) findViewById(R.id.text_reading); 

      number.setText(""); 

      } 
     }); 
Cuestiones relacionadas