gpt4 book ai didi

android - 永远不会调用 Activity 的 onBackPressed 方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:20 28 4
gpt4 key购买 nike

我试图拦截我的应用程序中的后退按钮事件以获得某些自定义功能,但我在相关回调中编写的任何内容都没有被执行,而且我无法理解为什么。

这是我重写的方法:

@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);
}

如果重要的话,我将把它放在一个扩展 ActionBarSherlock 中的 SherlockFragmentActivity 的 Activity 中。后退按钮仍然适用于从堆栈中弹出前一个 fragment 事务,但我无法实现自己的自定义功能。

更新:我在点击后退按钮时注意到以下 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 回调现在似乎可以正常工作了。我不确定我在做什么不同。然而,Key down 和 onBackPressed 仍然没有被调用,这很奇怪,但是 key up 似乎是一个足够的解决方法。

@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 回调没有被调用。

最佳答案

如果按下后退按钮,您需要让 onKeyDownPress 返回 true。这是您应该如何做的。 如果不返回true,触摸事件将不会被传递:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.e(LOG_TAG, "Key down = " + keyCode);
if(keyCode == KeyEvent.KEYCODE_BACK){
return true;
}else{
return super.onKeyDown(keyCode, event);
}
}

关于android - 永远不会调用 Activity 的 onBackPressed 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105708/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com