2012-06-29 4 views
1

버튼을 누르거나 'Enter'를 누르면 TextView에 문자열을 표시하는 간단한 코드가 있습니다. 사용자가 버튼을 누르면 모두 찾을 수 있지만 '입력'을 누르면 performClick()이 호출되어 버튼과 동일한 기능이 호출됩니다. 하지만 내 이름은 항상 두 번 호출됩니다.내 버튼은 항상 두 번 호출됩니다 performClick

private OnKeyListener ChampKeyListener = new OnKeyListener() 
    { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     { 
      if(keyCode == KeyEvent.KEYCODE_ENTER) 
      { 
       recherche.performClick(); // recherche is my button 
      } 
      return false; 
     } 
    }; 

    private OnClickListener RechercheListener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     //whatever I have tried here it is always called twice 

     } 
    }; 

어떻게 중지 할 수 있습니까? 나는 내가 다른 사람 View 또는 Activity에가는 것을 해결할 수 있다는 것을 보았지만 나는 그것들을 사용하고 싶지 않습니다.

힌트가 있습니까? 감사!

답변

5

1 보도 KeyEvent.ACTION_DOWN에 두 가지 작업이 있기 때문에 & KeyEvent.ACTION_UP

2 HTTP : //developer.android.com/reference/android/view/View.OnKeyListener.html

Returns 청취자가 이벤트를 사용하면 true이고, 그렇지 않으면 false입니다.

public boolean onKey(View v, int keyCode, KeyEvent event) 
       { 

      if (event.getAction() == KeyEvent.ACTION_DOWN) 
       { 
        if(keyCode == KeyEvent.KEYCODE_ENTER) 
        { 
         recherche.performClick(); // recherche is my button 
         return true; 
        } 


       } 

      return false; 
       } 
+0

이상과 같이 KEYCODE_DPAD_CENTER을 hanlde이 http://stackoverflow.com/questions/4451374/use-enter-key-on-softkeyboard-instead-of-clicking-button/4451825#4451825를 사용하는 잘 –

+0

내 문제를 해결해 줘서 고마워! 그리고 다른 트레드도 유용했습니다! – castors33

2

그것은 키를 누르면 다시 놓을 때 한 번 할 때, 이벤트가 두 번 발사되어있을 수 .. 그것을 시도. 시도 :

@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_ENTER && 
      event.getAction() == KeyEvent.ACTION_DOWN) { 
     recherche.performClick(); // recherche is my button 
     return true; // consume event 
    } 
    return false; 
} 
+1

감사합니다! 문제 해결됨! – castors33

관련 문제