当前位置: 首页 > 知识库问答 >
问题:

显示弹出窗口时,onBackPressed的覆盖方法不起作用

百里杰
2023-03-14

我想在android中显示弹出窗口时处理back press事件。我确实喜欢这个。在片段中:

@Override
public boolean onBackPressed() {
    if (backPressStrategy == BACK_PRESS_PLAN_A) {
        if (guideDialog != null) {
            guideDialog.dismiss();
        }
        closeFlashPay(REQ_CLOSE_FLASH_PAY_AND_FINISH);
        return true;
    } else if (backPressStrategy == BACK_PRESS_PLAN_B) {
        if (guideDialog != null) {
            guideDialog.dismiss();
        }
        getActivity().finish();
        return true;
    } else {
        return false;
    }
}

在活动中,我确实喜欢这样

@Override
public void onBackPressed() {
     PayBaseFragment contentFragment = (PayBaseFragment) getSupportFragmentManager().findFragmentByTag(TAG_CONTENT_FRAGMENT);
     if (contentFragment != null && contentFragment.onBackPressed()) {
         return;
     }
     super.onBackPressed();
}

问题是,当我第一次按下back按钮时,popupwindow就消失了,override onBackPressed方法没有被调用。除非我按两次后退按钮。我像这样显示我的弹出窗口

guideDialog.showAtLocation(getActivity().getWindow().getDecorView(), Gravity.CENTER, 0, 0);

谢谢你的帮助

共有1个答案

澹台蕴藉
2023-03-14

您需要使用以下命令处理对话框的后退按钮键:

dialog.setOnKeyListener(new Dialog.OnKeyListener() {
                        @Override
                        public boolean onKey(DialogInterface arg0, int keyCode,
                                             KeyEvent event) {
                            if (keyCode == KeyEvent.KEYCODE_BACK) {
                                dialog.dismiss();
                                // you can call your onBackPress here

                            } 
                            return true;
                        }
                    });
 类似资料:
  • 问题内容: 今天,我遇到了一个有趣(非常令人沮丧)的方法问题,该问题导致我认为是一个经过良好测试的类崩溃了,并导致了一个错误,使我花了很长时间来追踪。 为了完整起见,我没有使用IDE或调试器-只是老式的文本编辑器和System.out。时间非常有限,这是一个学校项目。 无论如何- 我开发一个基本的购物车可能包含的Book对象。为了贯彻落实,以及对车的方法,我想检查,如果在已经存在。所以我走了 在测

  • 问题内容: 我有这个AngularJS应用。一切正常。 现在,当满足特定条件时,我需要显示不同的弹出窗口,我想知道什么是最好的处理方式。 目前,我正在评估两个选项,但是我绝对会接受其他选项。 选项1 我可以为弹出窗口创建新的HTML元素,然后直接从控制器附加到DOM。 这将打破MVC设计模式。我对这种解决方案不满意。 选项2 我总是可以在静态HTML文件中插入所有弹出窗口的代码。然后,使用,我可以

  • 我有这个角度JS应用程序。一切都很好。 现在,我需要在特定条件成立时显示不同的弹出窗口,我想知道最好的方法是什么。 目前我正在评估两个选项,但我绝对愿意接受其他选项。 我可以为弹出窗口创建新的超文本标记语言元素,并直接从控制器附加到DOM。 这将打破 MVC 设计模式。我对这个解决方案不满意。 我总是可以在静态超文本标记语言文件中插入所有弹出窗口的代码。然后,使用,我可以只隐藏/显示正确的弹出窗口

  • 我想在单击“注册”按钮时打开一个弹出对话框。我想在弹出对话框中添加文本字段,密码字段等元素。如果您可以建议我如何将组件添加到弹出窗口,然后将弹出窗口添加到窗格并显示它,那就更好了。谢谢!。

  • 我试图从扩展服务的类中打开一个活动。当应用程序不在前台/未被使用时,我正在执行此任务。我可以在日志中看到,我的服务类故意触发了启动活动。标志\活动\新任务标志。但活动并未开始。但是,当应用程序处于前台/正在使用时,服务触发相同的活动时,活动就会打开。 经过几次搜索,我发现我需要在应用程序设置的“其他权限”部分中手动授予“在后台运行android时显示弹出窗口”的权限。 “在其他应用程序上显示”权限

  • 在过去的几天里,我一直在解决这个问题。尝试在