Ключевые события в TabActivities?
Я имею TabActivity и хочу ловить и обрабатывать нажатия HOME и BACK. Где мне нужно ловить эти события?
В моем подклассе TabActivity я реализую следующее:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
// Code handling
}
return super.onKeyDown(keyCode, event);
}
Не сработало
Поэтому я установил точку останова на строке оператора switch. Но эта функция никогда не вызывается, нажимаю ли я громкость вверх / вниз, меню, домой или назад. Где мне нужно поймать эти KeyEvents?
5 ответов
Оказывается, это довольно легко. Добавьте следующий код в дочернюю вкладку:
@Override
public void onBackPressed() {
this.getParent().onBackPressed();
}
Затем в TabActivity сделайте настоящую логику:
@Override
public void onBackPressed() {
// Called by children
}
В противном случае дочерние элементы будут перехватывать и использовать событие, не уведомляя узел вкладки.
У меня была та же проблема, и я обнаружил, что приоритетное dispatchKeyEvent работает.
Пример, который можно найти здесь для нажатия кнопки назад:
http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
Попробуйте это в вашем oncreate()
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
Я имею TabActivity и хочу ловить и обрабатывать нажатия HOME и BACK. Где мне нужно ловить эти события?
Вы никогда не сможете "справиться с прессами HOME".
Что касается BACK, вы можете использовать onKeyDown()
(для Android 1.x) или onBackPressed()
(для Android 2.x). Тем не менее, ваш TabActivity
может быть слишком поздно Например, если у вас есть действия в качестве содержимого ваших вкладок, возможно, одна из них перехватывает нажатие НАЗАД и организует нормальную обработку (т. Е. Закрытие действия). Поскольку я избегаю таких действий как вкладки, как чума (за исключением одного примера с книгой), я не экспериментировал с обработкой кнопок BACK в этом сценарии.