2010-09-18 5 views
15

Ich bin neu in Android-Entwicklung und ich kann nicht scheinen, eine gute Anleitung zu finden, wie man einen onKeyUp Listener verwendet.Android-Entwicklung: Wie Verwenden von OnKeyUp?

In meiner App habe ich eine große EditText, wenn jemand drückt und gibt einen Schlüssel in diesem EditText Ich möchte eine Funktion aufrufen, die in diesem EditText reguläre Ausdrücke ausführen wird.

Ich weiß nicht, wie ich das onKeyUp verwenden würde. Könnte mir bitte jemand zeigen wie?

Antwort

22

Der sehr richtige Weg ist die Verwendung der TextWatcher-Klasse.

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

Danke, ich war schon vor Jahren auf die TextWatcher-Klasse gestoßen. Ich habe vergessen, eine korrekte Antwort zu markieren, sorry für die Verschwendung Ihrer Zeit! – AlexPriceAP

0

Nur für eine EditText. es erreicht durch setOnClickListener() selbst. Keine Notwendigkeit für die onKeyUp(). Denn das wird durch ein Klick-/Touch-Event erfolgen. Recht? Tun Sie das einfach.

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

er wollte wahrscheinlich etwas während onkeyup tun, –

0

diese aus meinem Kopf schreiben, aber es sollte unter den folgenden Zeilen sein:

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

KORREKTUR:

Für eine Weile habe ich ein generisches onKeyListener. Ich stellte schnell fest, dass mein Code zweimal aufgerufen wurde. Einmal mit der Taste nach unten und einmal mit der Taste nach oben. Ich benutze jetzt den folgenden Listener und rufe den Code nur einmal an. "if (event.getAction() == KeyEvent.ACTION_UP)" ist der Schlüssel.

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; 
    } 
}; 

fand ich, dass onKeyUp() für jede Steuerung in der Aktivität automatisch aufgerufen wird. Wenn das ist, was wollen Sie, fügen Sie ihn einfach auf die Aktivität wie Sie das onCreate()

Beispiel hinzufügen:

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

Ich weiß, dass dies eine alte Frage, aber vielleicht wird diese andere mit dem gleichen Problem helfen.

1

Sie können prüfen, mit dem folgenden Code:

@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); 
    } } 

Hier Am Ende haben wir die super.onkeyUp Methode aufgerufen. Welches behandelt das Ereignis, wenn der Benutzer den gültigen Schlüssel nicht drückt.

Für weitere Details können Sie folgende link berücksichtigen.