我正在尝试在我的应用程序中拦截返回按钮事件以实现一些自定义功能,但是我在相关回调中编写的任何内容都没有被执行,而且我无法理解原因。以下是我重写的方法:
如果有关系的话,我正在将这个放在一个扩展SherlockFragmentActivity in ActionBarSherlock的活动中。返回按钮仍然可以弹出前一个片段事务,但我无法实现自己的自定义功能。
更新:当点击返回按钮时,我注意到以下logcat输出:
@Override
public void onBackPressed() {
super.onBackPressed();
Log.e(LOG_TAG, "Back pressed");
if (isMainScreenShowing) {
finish();
} else if (isTopLevelScreenShowing){
loadNewScreen(new AccountBalanceInfoFragment());
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.e(LOG_TAG, "Key down = " + keyCode);
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.e(LOG_TAG, "Key up = " + keyCode);
return super.onKeyDown(keyCode, event);
}
如果有关系的话,我正在将这个放在一个扩展SherlockFragmentActivity in ActionBarSherlock的活动中。返回按钮仍然可以弹出前一个片段事务,但我无法实现自己的自定义功能。
更新:当点击返回按钮时,我注意到以下logcat输出:
10-01 16:42:49.879: D/InputEventConsistencyVerifier(7597): KeyEvent: ACTION_UP but key was not down.`
10-01 16:42:49.879: D/InputEventConsistencyVerifier(7597): in com.android.internal.policy.impl.PhoneWindow$DecorView{40cd4198 V.E..... R.....I. 0,0-480,800}
10-01 16:42:49.879: D/InputEventConsistencyVerifier(7597): 0: sent at 68941888000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x8, repeatCount=0, eventTime=68941888, downTime=68941823, deviceId=0, source=0x101 }
目前有一些原因导致按键事件无法正确处理... 这仍然是一个谜团。
更新2: 我应该把我对SBerg答案的回应也复制在这里,因为它是相关的 -
我注意到onKeyUp回调现在似乎是工作的。我还不确定我现在做了什么不同。但是,KeyDown和OnBackPressed仍然没有被调用,这非常奇怪,但是现在KeyUp似乎足够解决问题了。
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.i(LOG_TAG, "Back pressed");
// do stuff here
}
return super.onKeyUp(keyCode, event);
}
目前这是一个适合的解决方法,但它有点混乱,而且仍然希望了解为什么第一个onBackPressed和onKeyDown回调函数没有被调用。
onKeyUp()
调用super.onKeyDown()
。 - Geobits