2011-01-25 12 views
8

Próbuję wyczyścić wielowierszowe pole EditText w metodzie OnEditorActionListener.onEditorAction.Czyszczenie multilinii EditText

Ale za pomocą dowolnego z oczywistych sposobów tj

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

kasuje tylko widocznych znaków - pozostawienie do liniami w obszarze (które później muszą być usunięte ręcznie).

Czy istnieje sposób "całkowitego" wyczyszczenia wielowierszowego pola EditText? (Lub przynajmniej - czy ktoś wie dlaczego powyżej nie działa?)

+0

Rozwiązany (w minutę po dobrze przespanej nocy) - znak nowej linii został dodany po wyczyszczeniu tekstu, ponieważ implementacja metody onEditorAction wracała false (z innych powodów). Zwrócenie "true" wskazuje, że "enter" zostało przetworzone/zużyte, a clear() zachowuje się zgodnie z oczekiwaniami. – tonys

+1

powinieneś dodać powyższą odpowiedź jako odpowiedź, a następnie zaakceptować ją, najlepiej z ładnym działającym kodem :-) –

+0

@ dave.c. Zrobione :-) – tonys

Odpowiedz

7

Solved (w minutę po dobrze przespanej nocy) - dodano znak nowej linii po wyczyszczeniu tekstu, ponieważ implementacja metody onEditorAction wracała false (z innych powodów).

Wracając true wskazuje, że 'enter' został przetworzony/zużyte i clear() zachowuje się zgodnie z oczekiwaniami:

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

nie mam IDE tutaj, aby sprawdzić, ale można spróbować:

  • ((EditText) view).clearComposingText() jest to dziedziczą metodę z TextView
  • Nie tak elegancko, ale może funkcjonalnie: setSingleLine =true, a następnie znowu fałszywie. Może przydatny dopóki ktoś może dostarczyć czegoś lepszego ...
+0

Z ciekawości (patrz komentarz do pytania oryginalnego) Próbowałem tego, ale nie działało. – tonys

0

Jest sposób z setMaxLines:

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

Po prostu dla rekordu (patrz komentarz do oryginalnego pytania) Próbowałem tego, ale nie działało. – tonys

+1

@ Tony: To dziwne, ponieważ zadziałało dla mnie. Skonfigurowałem proste działanie z tekstem edycji i przyciskiem. Zacząłem pisać tekst, tworząc tekst wielowierszowy. Następnie za pomocą przycisku zadzwoniłem do dwóch linii powyżej, a tekst edycji został całkowicie wyczyszczony. – gulbrandr

+0

Zgaduję, że twoja implementacja onEditorAction (...) zwróciła true, w takim przypadku getEditableText(). Clear() działa dobrze. – tonys

0

Może czuję się trochę zbyt szczęśliwy, ale:

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

Byłbym zaskoczony, gdyby to zadziałało, ponieważ pierwszą rzeczą, która "setText" (tekst CharSequence, typ BufferType, boolean notifyBefore, int oldlen) '(który jest ostatecznie wywoływany przez' setText (tekst CharSequence) ') jest sprawdzenie 'null' i zamień na pusty' String'. Zobacz [kod źródłowy] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/widget/TextView.java#2559).Jeśli to zadziała, chciałbym wiedzieć dlaczego. –

+0

to nie działa (próbowałem już) – tonys

+0

hehe :-) Przepraszamy za młodzieńczy optymizm, ale czasami zauważam, że jestem tak zajęty znajdowaniem "korzenia zła", że po prostu nie sprawdzam najprostsze rzeczy (co oczywiście prawie zawsze jest dokładnie tym, co rozwiązuje mój problem) :-) W tym przypadku nie było to jednak takie proste (tak, jak wyżej @ dave.c). – dbm

0

Kiedyś to kiedy miałem jasną przycisk na moim 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(""); 

      } 
     });