3

我有一个简单的应用程序,我在其中执行以下操作:

public void onClick(View v){

    switch(v.getId()) {     
        case R.id.buttonup:
            onButtonUp();
            break;

        case R.id.buttondown:
            onButtonDown();
            break;
    }

}

public boolean dispatchKeyEvent(KeyEvent event){
        int keyCode = event.getKeyCode();
        switch (keyCode) {

        case KeyEvent.KEYCODE_VOLUME_UP:
             onButtonUp();
             return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            onButtonDown();
            return true;

        default:
            return super.dispatchKeyEvent(event);

        }

    }

void onButtonUp(){
    increment_some_static_class_variable;
}

void onButtonUp(){
    decrement_some_static_class_variable;
}

问题是,每当我按下音量按钮时,onButtonUp 和 onButtondown 函数都会被调用两次。当我按下屏幕按钮(在 onClick(View) 中处理)时,不会发生这种情况。我没有发现有人有这个问题,所以我问这里的人。我是 Android 新手,这是我的第一个应用程序。使用 Log,我发现对 onButtonUp 和 onButtonDown 的调用都来自 dispatchKeyEvent 函数。这里有什么问题?我希望我能很好地解释这个问题。建议/解决方案是最受欢迎的。

4

1 回答 1

5

KeyEvent 可以表示多个动作,特别是 ACTION_DOWN 和 ACTION_UP。由于您没有在 dispatchKeyEvent 回调中检查操作,因此您正在为音量按钮上的 DOWN 和 UP 事件调用按钮单击方法。试试这样:

public boolean dispatchKeyEvent(KeyEvent event){
    int keyCode = event.getKeyCode();
    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch (keyCode) {

            case KeyEvent.KEYCODE_VOLUME_UP:
                 onButtonUp();
                 return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                onButtonDown();
                return true;

            default:
                return super.dispatchKeyEvent(event);
        }
    }
}
于 2013-04-03T02:59:52.860 回答