2012-12-14 63 views
0

我想要做的就是以編程方式將onKeyDown偵聽器添加到現有活動。關於我想要做的事情的上下文:我想做一個獨立的函數來處理在mediaplayer中發生的點擊事件。Android - 以編程方式向活動添加關鍵偵聽器

ie:假裝我有這個班。

public class Main extends Activity 
{  
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
      setContentView(R.layout.maingui); 
    } 

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: 
     } 
     return false; 
     } 
} 

我想要做的是添加一個函數,通過編程添加onKeyDown監聽器。

即:

public class Main extends Activity 
    {  
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.maingui); 

       createListener(); 
     } 

} 
public void createListener() 
{ 
    @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 

      switch (keyCode) { 
       case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: 
      } 
      return false; 
    } 
} 

這顯然是不行的,但給你的什麼,我試圖做一個好主意。

這是我試過哪些不起作用。

public class Main extends Activity 
    {  
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.maingui); 

      MyKeyClickClass.createListener(this); 
    } 

} 
  • 然後在MyKeyClickClass類

    public static void createListener(Activity act) 
        {  
         View testing = act.getWindow().getDecorView().findViewById(android.R.id.content); 
    
         testing.setOnKeyListener(new OnKeyListener(){ 
    
          @Override 
          public boolean onKey(View v, int keyCode, KeyEvent event) { 
           // TODO Auto-generated method stub 
    
           String test = "Hi"; 
    
           return false; 
          } 
         }); 
        } 
    

這是可能做到想象這個功能呢?我沒有得到任何迴應這樣做的關鍵事件。

乾杯

+0

也許我錯過了這裏很明顯的一些東西,但是你期望會發生什麼?你初始化一個變量並返回false – codeMagic

+1

我很困惑'onKeyDown()'已經是一個監聽器,你爲什麼要做一個監聽器? – Sam

+0

這只是存根代碼。我想動態地創建一個keyEventListener。我想處理活動中發生的單擊事件,但是在該活動中沒有實例化onkeyDown偵聽器。這可能會讓人感到奇怪,但我向你保證,有很好的推理。簡而言之,我想知道是否可以調用一個爲整個活動創建關鍵事件偵聽器的函數。 – Dave

回答

1

如果因任何原因,你不能隨便用的onkeydown,不能你只需要傳遞的onkeydown它的參數給另一個函數?

如果你創建一個myKeyListener類,那麼你可以做這樣的事情。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    myKeyListener.onKeyDown(keyCode, event); 
} 
+0

這是一個有趣的想法。但我希望從頭開始創建聽衆。因此,如果活動中沒有onKeyDown,我的函數將被調用來動態創建它。在你的情況下,需要事先了解自定義KeyListener。這就是爲什麼在我上面的示例中,我試圖將該活動傳遞給該函數,並以這種方式動態地創建onKeyListener。然而,它不是按原樣工作的。 – Dave

+1

由於所有活動都具有onKeyDown的默認實現,因此您必須覆蓋它才能控制它。要做到這一點,你將不得不創建一個自定義的KeyDownListener類,該類將有一個onKeyDown方法,主Activity的onKeyDown將調用該方法。主要活動需要像setKeyDownListener這樣的函數,您可以使用它來傳遞KeyDownListener對象。 – TSL

+0

非常感謝您對TSL的幫助。我能夠接受你的建議並實施一些與我原先想象的不一樣的東西,但應該爲我的目的而工作。謝謝!!! – Dave