2014-06-09 57 views
0

我调试了以下代码片段,并知道调用方法dispatchKeyEvent()两次。请提出解决方案dispatchKeyEvent()调用两次

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
if(event.getKeyCode()== KeyEvent.KEYCODE_DPAD_CENTER) 
    { 
     if(cDetail.getVisibility()==View.VISIBLE ) 
     { 

      cDetail.setVisibility(View.INVISIBLE); 
      cList.setVisibility(View.INVISIBLE); 
     } 

     else 
     { 

      cDetail.setVisibility(View.VISIBLE); 
      cList.setVisibility(View.VISIBLE); 

     } 


    } 

    return super.dispatchKeyEvent(event); 
} 
+0

@sakir回答说要过滤事件,我不确定,按下任意键时是否调用KeyEvent.ACTION_DOWN&KeyEvent.ACTION_UP? –

回答

2

dispatchKeyEvent火两次:第一次按下按键,并为关键了第二次,所以你必须过滤:

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; 

      } 
+0

好的......你过滤了KeyEvent.ACTION_DOWN,KeyEvent.ACTION_UP怎么样 –

+0

Android上的大部分按键事件都在ACTION_UP上调用,所以上面的代码在ACTION_UP上运行一次,只是把你的代码放在if语句 – JustMe