2012-06-29 39 views
1

我有一個簡單的代碼,在按下按鈕或用戶按下「Enter」後顯示TextView中的字符串。當用戶按下按鈕時,全部都是找到的,但是當按下'enter'時,它會調用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 

     } 
    }; 

我該如何阻止這一點。我看到,我可以解決,我去另一個ViewActivity,但我不想使用這些。

任何提示?謝謝!

回答

5

1-因爲有上壓KeyEvent.ACTION_DOWN兩個動作& KeyEvent.ACTION_UP

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

返回 如果偵聽器已消耗該事件,則返回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

或更好的使用這個http://stackoverflow.com/questions/4451374/use-enter-key-on-softkeyboard-instead-of-clicking-button/4451825#4451825來hanlde KEYCODE_DPAD_CENTER爲以及 –

+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