2010-09-18 9 views
15

Jestem nowy w rozwoju Androida i nie mogę znaleźć dobrego poradnika, jak używać słuchacza onKeyUp.Rozwój Androida: jak korzystać z onKeyUp?

W mojej aplikacji mam duży EditText, gdy ktoś naciśnie i zwolni klucz w tym EditText Chcę wywołać funkcję, która będzie wykonywać wyrażeń regularnych w tym EditText.

Nie wiem, w jaki sposób mogę użyć OnKeyUp. Czy ktoś mógłby mi pokazać, jak?

Odpowiedz

22

Bardzo właściwym sposobem jest użycie klasy TextWatcher.

EditText tv_filter = (EditText) findViewById(R.id.filter); 

TextWatcher fieldValidatorTextWatcher = new TextWatcher() { 
     @Override 
     public void afterTextChanged(Editable s) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (filterLongEnough()) { 
       populateList(); 
      } 
     } 

     private boolean filterLongEnough() { 
      return tv_filter.getText().toString().trim().length() > 2; 
     } 
    }; 
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher); 
+0

Dzięki, już wcześniej spotkałem się z klasą TextWatcher. Nie pamiętam, aby zaznaczyć prawidłową odpowiedź, przepraszam za marnowanie czasu! – AlexPriceAP

0

Tylko dla EditText. jego osiągnięcie przez samo setOnClickListener(). Nie ma potrzeby dla onKeyUp(). Ponieważ zostanie to wykonane przez kliknięcie/wydarzenie dotykowe. dobrze? Po prostu to zrób.

edittext_object.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    //do what you need 
    } 
} 
+0

prawdopodobnie chciał coś zrobić podczas onkeyup, –

0

Pisanie to z mojej głowy, ale powinna być jednym z następujących linii:

text.setKeyListener(new KeyListener() { 
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 


     if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent 


     return super.onKeyUp(keyCode, event); 
    } 
}); 
10

korekta

Przez pewien czas używałem rodzajowe onKeyListener. Wkrótce odkryłem, że mój kod był wywoływany dwa razy. Raz klawiszem w dół i raz klawiszem w górę. Teraz używam poniższego detektora i tylko raz wywołuję kod. "if (event.getAction() == KeyEvent.ACTION_UP)" jest kluczem.

OnKeyListener keyListener = new OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_UP) { 
      //do something here 
     } 
     return false; 
    } 
}; 

stwierdziliśmy, że onKeyUp() nazywa się automatycznie dla każdej kontroli w działalności. Jeśli to, co chcesz, dodać go do działalności jak dodasz onCreate()

Przykład:

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    //do something here 
    return false; 
}; 

wiem, że jest to stare pytanie, ale może to pomoże innym w tej samej kwestii.

1

Można rozważyć stosując następujący kod:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     ... 
     case KeyEvent.KEYCODE_J: 
      if (event.isShiftPressed()) { 
       fireLaser(); 
      } else { 
       fireMachineGun(); 
      } 
      return true; 
     case KeyEvent.KEYCODE_K: 
      if (event.isShiftPressed()) { 
       fireSeekingMissle(); 
      } else { 
       fireMissile(); 
      } 
      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } } 

tu w końcu nazwaliśmy metoda super.onkeyUp. Który obsługuje zdarzenie, gdy użytkownik nie naciśnie poprawnego klucza.

Aby uzyskać więcej informacji, możesz rozważyć następujące link.

Powiązane problemy