2015-11-30 3 views
0

У меня есть две действия, которые говорят A и B. Активность A имеет реализацию обработки событий для таких ключей, как CHANNEL_UP и CHANNEL_DOWN. Теперь, когда активность B видна и все клавиши нажаты, завершение вызывается на B. В таких случаях обработка ключа должна распространяться на Activity A. Но метод OnKeyDown Activity A даже не вызван. Код для Activity B onkeyDown приведен ниже.обработчик события onKeyDown не распространяется на android

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

    switch(keyCode) { 
     case KeyEvent.KEYCODE_CHANNEL_UP: 
     case KeyEvent.KEYCODE_CHANNEL_DOWN: 
      finish(); 
      break; 
    } 

    return false; 
} 

ответ

0

Я бы не ожидал, что ключевые события будут распространяться именно так.

Похоже, что вы можете начать B с startActivityForResult, а затем установить причину для отделки, которую A может обрабатывать.

+0

Это был бы вариант, но согласно документации по http://developer.android.com/reference/android/view/KeyEvent.Callback.html#onKeyDown(int.android.view.KeyEvent) false должен быть возвращен в чтобы позволить следующему приемнику справиться с этим. – mobiledev

+0

Это правда, но вы заметите, что он находится в пакете android.view. Это позволит другим представлениям обрабатывать событие, но они не пересекают границы активности afaik. – Buddy

+0

Я не уверен, что это так. Кажется, что dispatchKeyEvent Activity A вызывается, но с действием ACTION_UP может быть, потому что onkeydown уже обрабатывается в Activity B. В любом случае, в моем случае предложенный вами ответ может оказаться лучше. – mobiledev

0

Я просто попробовал аналогичную реализацию (я использую KeyEvent.KEYCODE_BACK), и он тоже не работает.

Я предполагаю, что keyevent ТОЛЬКО распространяется внутри действия, от дочерних представлений до родительских представлений и Activity.

Если действие уничтожено, мероприятие исчезло.

Смежные вопросы