2010-09-18 2 views
15

Я новичок в разработке Android, и я не могу найти подходящего руководства по использованию прослушивателя onKeyUp.Разработка Android: как использовать onKeyUp?

В моем приложении у меня есть большой EditText, когда кто-то нажимает и отпускает ключ в этом EditText Я хочу вызвать функцию, которая будет выполнять регулярные выражения в этом EditText.

Я не знаю, как использовать onKeyUp. Может кто-нибудь, пожалуйста, покажите мне, как это сделать?

ответ

22

Очень правильный способ использования класса 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

Спасибо, я уже наткнулся на класс TextWatcher давным-давно. Должно быть, забыл отметить правильный ответ, извините за то, что тратил свое время! – AlexPriceAP

0

Только для EditText. его достигают setOnClickListener() себя. Нет необходимости в onKeyUp(). Потому что это произойдет с помощью события Click/Touch. правильно? Просто сделайте это.

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

он, вероятно, хотел что-то сделать во время onkeyup, –

0

Дать это из моей головы, но это должно быть одним из следующих строк:

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

CORRECTION:

Некоторое время я использовал общий onKeyListener. Вскоре я обнаружил, что мой код вызывается дважды. Однажды с клавишей вниз и один раз с клавишей вверх. Теперь я использую следующий прослушиватель и один раз вызываю код. "if (event.getAction() == KeyEvent.ACTION_UP)" - это ключ.

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

Я обнаружил, что onKeyUp() вызывается автоматически для каждого элемента управления в деятельности. Если это то, что вы хотите, добавьте его в операцию так же, как вы добавили пример onCreate()

:

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

Я знаю, что это старый вопрос, но, возможно, это поможет другим с той же проблемой.

1

Вы можете рассмотреть, используя следующий код:

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

Здесь В конце концов мы назвали метод super.onkeyUp. Которая обрабатывает событие, когда пользователь не нажимает действительный ключ.

Для получения дополнительной информации вы можете рассмотреть следующие вопросы: link.

Смежные вопросы