android-活动的onBackPressed方法永远不会被调用

android-活动的onBackPressed方法永远不会被调用,第1张

概述我试图拦截应用程序中的后退按钮事件以实现某些自定义功能,但是我未在相关回调中编写任何内容,并且我一生都无法理解为什么.这是我重写的方法:@OverridepublicvoidonBackPressed(){super.onBackPressed();Log.e(LOG_TAG,"Backpressed");if(isMainScreenS

我试图拦截应用程序中的后退按钮事件以实现某些自定义功能,但是我未在相关回调中编写任何内容,并且我一生都无法理解为什么.

这是我重写的方法:

@OverrIDepublic voID onBackpressed() {    super.onBackpressed();    Log.e(LOG_TAG, "Back pressed");    if (isMainScreenShowing) {        finish();    } else if (istopLevelScreenShowing){        loadNewScreen(new AccountBalanceInfoFragment());    }}@OverrIDepublic boolean onKeyDown(int keyCode, KeyEvent event) {    Log.e(LOG_TAG, "Key down = " + keyCode);    return super.onKeyDown(keyCode, event);}@OverrIDepublic boolean onKeyUp(int keyCode, KeyEvent event) {    Log.e(LOG_TAG, "Key up = " + keyCode);    return super.onKeyDown(keyCode, event);}

如果有关系,我将其放在一个扩展ActionbarSherlock中的SherlockFragmentActivity的活动中.后退按钮仍可用于从堆栈中d出先前的片段事务,但是我无法实现自己的自定义功能.

更新:按下后退按钮时,我注意到以下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似乎已经足够了.

@OverrIDepublic 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,则不会传递touch事件:

@OverrIDepublic 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-活动的onBackPressed方法永远不会被调用全部内容,希望文章能够帮你解决android-活动的onBackPressed方法永远不会被调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087597.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存