2011-01-25 11 views
8

Sto tentando di cancellare un campo EditText multilinea all'interno del metodo OnEditorActionListener.onEditorAction.Cancellazione di una multilinea EditText

Ma usando qualsiasi dei modi ovvi cioè

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

cancella solo i caratteri visibili - lasciando le nuove righe nel campo (che poi devono essere eliminati manualmente).

C'è modo di cancellare "completamente" un campo EditText multilinea? (O almeno - Qualcuno sa il motivo per cui quanto sopra non funzionano?)

+0

Risolto (in un minuto dopo una buona notte di sonno) - la nuova riga veniva aggiunta dopo aver cancellato il testo perché l'implementazione del metodo onEditorAction restituiva false (per altri motivi). Il ritorno 'true' indica che il 'invio' è stato elaborato/consumato e il clear() si comporta come previsto. – tonys

+1

dovresti aggiungere sopra come risposta e accettarlo, preferibilmente con un buon esempio di codice di lavoro :-) –

+0

@ dave.c. Fatto :-) – tonys

risposta

7

Risolto (in un minuto dopo una buona notte di sonno) - la nuova riga veniva aggiunta dopo aver cancellato il testo perché l'implementazione del metodo onEditorAction stava restituendo false (per altri motivi).

Tornando true indica che il 'enter' è stato elaborato/consumati e la chiara() si comporta come previsto:

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

Non ho un IDE qui per provare, ma si potrebbe fare un tentativo:

  • ((EditText) view).clearComposingText() E 'una ereditare il metodo da TextView
  • Non così elegante ma forse funzionale: setSingleLine =true e quindi false false. Forse utile fino a quando qualcuno in grado di fornire qualcosa di meglio ...
+0

Per curiosità (vedi commento alla domanda originale) Ho provato questo, ma non sembra funzionare. – tonys

0

C'è un modo con setMaxLines:

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

Solo per la cronaca (vedi commento alla domanda originale) Ho provato questo, ma non sembra funzionare. – tonys

+1

@tonys: questo è strano perché ha funzionato per me. Ho impostato una semplice attività con un testo di modifica e un pulsante. Ho iniziato a digitare del testo rendendo il testo di modifica multilinea. Quindi con il pulsante ho chiamato le due righe sopra e il testo di modifica è stato completamente cancellato. – gulbrandr

+0

Immagino che l'implementazione di onEditorAction (...) restituisca true, nel qual caso getEditableText(). Clear() funziona perfettamente. – tonys

0

Forse mi sento un po 'troppo fortunata ma:

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

Sarei sorpreso se questo funziona, come la prima cosa che 'setText (testo CharSequence, tipo BufferType, booleano notifyBefore, int oldlen)' (che alla fine viene chiamato da 'setText (CharSequence text)') è controllare 'null' e sostituirlo con' String' vuoto. Vedi il [codice sorgente] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/TextView.java#2559).Se funziona, mi piacerebbe sapere perché. –

+0

non funziona (l'avevo già provato) – tonys

+0

hehe :-) Scusate per l'ottimismo giovanile, ma a volte noto che sono così impegnato a trovare la "radice del male" che semplicemente non riesco a controllare le cose più semplici (che ovviamente è quasi sempre quello che risolve il mio problema) :-) In questo caso non è stato davvero così facile (proprio come @ dave.c notato sopra). – dbm

0

ho usato questo quando ho avuto un pulsante chiaro su mia app

  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(""); 

      } 
     }); 
Problemi correlati