- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图拦截我的应用程序中的后退按钮事件以获得某些自定义功能,但我在相关回调中编写的任何内容都没有被执行,而且我无法理解为什么。
这是我重写的方法:
@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/
我有一个包含 2 个 Activity 的应用程序,第一个是从 http 加载数据并显示标题,第二个是特定标题的详细信息。 在硬件上从第二个屏幕按下第一页不会重新加载,这很好。 在后面的操作栏上,页面
我试图返回确认对话框,因此我决定处理 onbackpressed(),然后我将我的代码用于确认对话框,并为 null 监听器设置了 ok 和取消按钮。 @Override public void on
我有三个 java Activity : MainActivity 是您打开应用程序时的第一个屏幕。另外两个是PlayActivity和GuessActivity我在 Play 和 Guess Act
我已经坚持了好几天了。我有一个 Activity 。我实现了 @Override public void onBackPressed() { Log.e("TEST", "Pressed ba
我有一个带有 BottomNavigation 的应用程序(3 个项目)。 Item 1 加载 Fragment 1,Item 2 加载 Fragment 2,Item 3 加载 Fragment 3
我想在我的动态壁纸设置上实现 Appbrain 插页式广告, 我按照 - http://www.appbrain.com/info/sdk-docs/interstitial.html 上给出的步骤进
我有一个问题,这里也讨论了这个问题: onBackPressed never gets called 我试图在按下 Android 手机上的 native 后退按钮时取消倒计时计时器。所以我想重写 o
我尝试使用以下内容配置“后退”按钮: Public void onBackPressed(){return;} 但它不会产生任何东西(我也尝试过 super.onBack... 和 finish)。我
我正在尝试添加此功能: -当点击 Return 按钮时,它会弹出一个退出提示 (AlertDialog with yes or no) 问题 但是它不能正常工作。如果我点击按钮,它会直接退出程序。 这
我想按照下面的方式进行编码.. boolean doubleBackToExitPressedOnce = false; @Override public void onBackPressed() {
我正在制作一个电视 channel 流媒体应用程序,当从 ListView 中点击一个 channel 时,它会转到另一个 Activity ,然后会弹出播放器选择窗口,并在选择播放器后播放视频。现在
我有 3 个 Activity 第一个是登录第二是注册第三个主页 Activity (Bottom_nav) 带有底部导航,有 3 个 fragment A、B、C。 登录 Activity 是启动器
这是我的应用程序的结构: Activity A 是一个 ListViewActivity,带有启动 B Activity 的按钮。 在完成表单后的 B Activity 中,有一个按钮可以启动 C A
我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始游戏,开始一个新的 Activity 。但其他按钮,如“法律内容”或“教程”,仅通过 setContentView 显示新的 XML 布局。
我有一个包含 WebView 的 Activity ,我在打开时传递了 URL,像这样: Intent activity = new Intent(getApplicationContext(),Ne
如果我在 Android 1.5 上使用 onBackPressed(),我的应用程序会崩溃。如果在 Android 1.5 设备上运行,是否有可能停用此功能? 那里的代码不是绝对必要的,而是真正的“
基本上我的应用程序有一个登录屏幕,登录后您可以进行许多 Activity 。当我按下主页按钮时,应用程序进入后台,如果用户在一定时间内没有打开它,用户 session 将关闭,您将返回到登录屏幕。现在
我正在尝试通过单击后退按钮关闭我的应用程序。在主屏幕上,后退按钮会将您带到制作人员屏幕。在该积分屏幕上,我想使用后退按钮关闭该应用程序。不幸的是,我正在调用的 onBackPressed() 方法似乎
我有 3 个自定义对话框 (DialogFragment)。所有这些都是不可取消的,因为有必要,用户不能关闭它们。第一个对话开始第二个,第二个开始第三个。现在我想回到上一个对话框,如果我正在使用 ba
实际上我的问题是,当我按下后退按钮时,它会显示一个对话框,同时应用程序完成时没有对键进行任何操作?谁能解决这个问题? @Override public void onBackPressed() {
我是一名优秀的程序员,十分优秀!