2012-10-02 15 views
5

Zrobiłem wniosek, aby działać jako klawiatura zdalna, gdzie użytkownik kliknie na editext i wpisz i odpowiadające im alfabety zostaną wpisane na komputerze.Zapobieganie "klawisz Enter", aby uruchomić TextWatcher

Wykryłem różne alfabety i cyfry za pomocą TextWatchera i pomyślnie wysłałem je do mojego serwera.

Problem pojawia się, gdy użytkownik naciśnie klawisz Enter. Spowoduje to również uruchomienie TextWatchera. i ponieważ wysyłam najnowsze wprowadzone zmiany, błąd pojawia się po stronie serwera.

Jako rozwiązanie co zrobiłem jest, ustawić jedną onkeylistener jak również, który wykryje klawisz Enter i wykonywać działania i CONSUME, ale niestety w tym przypadku również pierwszy textwatcher zostaje wyzwolony, a następnie onkeylistener.

Oto kod mojego onkeylistener

keyboard.setOnKeyListener(new OnKeyListener() {     
    public boolean onKey(View v, int keyCode, KeyEvent event) {     
    if(keyCode == KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_UP){ 
        out.println("enter"); 
       return true; 
       } 
     return false; 
      } 
    }); 

Kodeks TextWatcher:

private TextWatcher watcher = new TextWatcher() { 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(count>0){ 
     out.println(":"+s.subSequence(start, start+count).toString()); 
     } 
    } 
      . 
      . 
      . 

Problem polega na naciśnięciu klawisza Enter wystrzeliwuje TextWatcher za onTextChanged jak również onkeylistener. mając na uwadze, że chcę tylko na kluczowego słuchacza do ognia. Chcę zwolnić Textwatchera tylko w przypadku alfabetów, liczb, niektórych symboli itp.

Również jeśli możesz zaproponować inne podejście do wykrywania i wysyłania znaków (miękkie) będzie świetnie.

+0

Próbowałem również umieścić, jeśli cond. wewnątrz TextWatchera, aby sprawdzić, czy najnowsza zmiana nie ma znaku alfanumerycznego. jeśli tak się stanie, to nie zadrży on.println(). Ale to też nie działa. nadal wykrywa klawisz Enter i wchodzi do warunku i wykonuje out.println(). – PrateekArora

+0

Ok myślę, że to rozwiązałem. w Textwatcherze dodaj tę instrukcję if: jeśli (s.toString(). substring (start) .contains ("\ n")) w ten sposób, jeśli ostatnio wprowadzony klucz był 'enter', to wejdzie w to, a następnie będziesz może wykonać, co chcesz. – PrateekArora

Odpowiedz

1

Ok myślę, że to rozwiązałem. w Textwatcher dodać to, że jeśli oświadczenie:

if(s.toString().substring(start).contains("\n")) 

w ten sposób, jeśli ostatni klucz wprowadzony został „enter” wtedy byłoby pójść na to, a następnie u można wykonać cokolwiek u chcą.

Powiązane problemy