반응형
onKey ()가 두 번 호출되는 이유는 무엇입니까?
이 코드를 사용하고 있습니다.
public boolean onKey(View v, int keyCode, KeyEvent event) {
msg = (EditText)findViewById(R.id.msg);
String message = msg.getText().toString();
if(keyCode == 66)
{
//It's hitting here twice.
}
return false;
};
엔터를 눌렀을 때 두 번 치는 이유를 알려주세요.
OnKey는 두 번 실행됩니다. 첫 번째는 키 다운, 두 번째는 키 업이므로 다음을 필터링해야합니다.
YOUR_VIEW.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//This is the filter
if (event.getAction()!=KeyEvent.ACTION_DOWN)
return true;
switch (keyCode) {
case KeyEvent.KEYCODE_1 :
MakeToast(1);
break;
case KeyEvent.KEYCODE_2 :
MakeToast(2);
break;
case KeyEvent.KEYCODE_3 :
MakeToast(3);
break;
}
return true;
}
});
itemView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
int pos = getAdapterPosition();
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_MENU){
//code here
}
return false;
}
});
edittext.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN || keyEvent.getAction() == KeyEvent.ACTION_UP) {
switch (i) {
case KeyEvent.KEYCODE_ENTER:
if (!HelperFunction.isStringEmpty(edittext.getText().toString())) {
if (loadCount == 0) {
loadCount ++;
}
}
default:
return false;
}
}
return false;
}
이 코드 블록은 코드를 두 번 호출하는 것을 방지합니다. loadCount == 0이면 코드 블록을 실행하고 if 블록에서 loadCount ++을 수행하고 있습니다. 따라서 내 코드 블록은 제 시간에 작동합니다.
참고 URL : https://stackoverflow.com/questions/3802887/why-is-onkey-called-twice
반응형
'your programing' 카테고리의 다른 글
방법 : Android Studio에 플러그인 설치 (0) | 2020.10.04 |
---|---|
일괄 작업에서 파일 이름을 타임 스탬프로 만들기 (0) | 2020.10.04 |
일반적으로 로그 항목에 태그를 어떻게 지정합니까? (0) | 2020.10.04 |
Web Config Transform이 작동하지 않음 (0) | 2020.10.04 |
flatMap / Map 변환에 대한 이해를위한 것과 혼동 (0) | 2020.10.04 |