Android onBackPressed() 没有被调用?

2024-07-04

在我的 MainActivity(从 AppCompatActivity 扩展)中,我想重写 onBackPressed 方法,如下所示:

@Override
public void onBackPressed() {
    Log.d("MainActivity","onBackPressed");
    Toast.makeText(getApplicationContext(),"onBackPressed",Toast.LENGTH_SHORT).show();
}

但 onBackPressed 不会被调用。然而,如果我不覆盖 onBackPressed,应用程序将关闭,当我按下后退按钮时,如果我覆盖它,它不会关闭。

我的其余活动如下所示:

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;
private Drawer drawer;
private FloatingActionButton fab_test;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    fab_test = (FloatingActionButton) findViewById(R.id.fab_test);
    fab_test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplicationContext(),"FAB Test pressed",Toast.LENGTH_SHORT).show();
        }
    });

    buildDrawer();

    getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer,page).commit();
}

@Override
public void onBackPressed() {
    Log.d("MainActivity","onBackPressed");
    Toast.makeText(getApplicationContext(),"onBackPressed",Toast.LENGTH_SHORT).show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);      
    return true;
}
}

编辑:我说的是硬件后退按钮(不是操作栏按钮)


这个问题已经得到解答,但我觉得在这个主题中需要澄清一些事情。大多数评论和答案都指出使用super.onBackPressed()这就是方法不起作用的原因onBackPressed()。但这是不正确的,并且让其他初学者知道这一点很重要。方法onBackPressed()不需要使用super.onBackPressed() . onBackPressed()例如,如果有人发表评论,也有效super.onBackPressed() out.

正如提问者所写,他不会使用super.onBackPressed()因为它会关闭该活动。因此,它不起作用的原因可以分为三个可能的原因:

  1. 由于 logcat 控制台中的过滤器错误,日志无法工作
  2. 由于传递的上下文错误,Toast 不起作用
  3. 供应商实施了错误的操作系统。

通常,吐司通过传递正确的上下文来工作。对于提问者来说,只需传递this .

@Override
public void onBackPressed() {
    Log.d("MainActivity","onBackPressed");
    Toast.makeText(this,"onBackPressed",Toast.LENGTH_SHORT).show();
}

对于日志,只需在 logcat 上设置正确的过滤器即可。

我不在乎现在是否有人投反对票,但对于其他初学者来说必须清楚的是,super.onBackPressed()不得使用。

无论如何,使用onKeyDown()也是一个解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android onBackPressed() 没有被调用? 的相关文章

随机推荐

  • AJAX 调用后使用 jquery 刷新 DOM

    我正在做一个新项目http www hotwirerevealed com http www hotwirerevealed com它显示 识别 hotwire com 上的酒店 输入状态和目的地后 我有一个 javascript 函数 它
  • XACML如何有效控制对资源集合(列表)的访问

    假设我有一个集合transactions以及授予的政策read access对于具有该角色的用户 该集合中的事务user 如果用户的department与记录中的 on 相同 问题 如果我访问单个资源 则检查每个资源的访问权限没有问题 但是
  • 模板内嵌套 for 循环

    模型 py class Task models Model level models ForeignKey Level on delete models CASCADE todo models ForeignKey ToDo on dele
  • 删除/重置核心数据中的所有条目?

    您知道有什么方法可以删除存储在核心数据中的所有条目吗 我的架构应该保持不变 我只是想将其重置为空白 Edit 我希望以编程方式执行此操作 以便用户基本上可以点击reset button 您仍然可以使用 NSFileManager remov
  • MVC3 将 ControllerContext 传递给线程?

    我在 MVC3 应用程序中使用 Rotativa 将 pdf 生成到内存流中 然后将其作为电子邮件附件发送出去 这工作正常 但速度相当慢 只有 1 个用户约 5 7 秒 所以我一直在尝试将其放入一个单独的线程中 这样用户就不会陷入巨大的延迟
  • getAllNetworkInfo() 在 M 中已弃用,但其替代品具有不同的行为

    ConnectivityManager 的 getAllNetworkInfo 在 API 23 上已弃用 其注释表示使用 getAllNetworks 代替 然而我发现这些没有相同的行为 例如 如果手机有可用的活动蜂窝网络 但 wifi
  • 新的 JUnit 4.8.1 @Category 渲染测试套件几乎已经过时了吗?

    给出的问题 如何运行属于某个类别的所有测试 和答案 https stackoverflow com questions 2176570 how to run all tests belonging to a certain category
  • HTML 文本和密码输入字段的大小不同 Internet Explorer

    我正在为我的登录表单使用此表单设置 tr td class label Username td td td tr
  • 在 Ruby on Rails 中使用 fork 创建并行进程

    我在 Apache 上使用 Passenger 制作了一个 Rails 3 应用程序 我有这个代码 class Billing lt ActiveRecord Base after save sendEmails private def s
  • 致命错误:对布尔值调用成员函数 count()

    class db private pdo query error false results count 0 private function construct try host config get mysql host databas
  • C# 中的新类型定义

    我正在寻找定义新类型并在 C 中使用它的可能性 如下所示 类定义 public class Position public double180 Longitude get set double180 is a type within a r
  • 更改 NSSplitViewController 内的视图

    我正在尝试将我的 Objective C 和现在正在提高的 Swift 知识迁移到 Mac OS X 的应用程序 学习曲线陡峭 我正在尝试加载一个NSSplitViewController如果您愿意的话 根据 主视图 上按下的按钮 详细视图
  • AWS CodeDeploy yaml 文件错误

    我正在使用 AWS 代码部署到 Windows 环境来部署应用程序 我使用 apspec yml yaml 文件 当我部署应用程序时 出现以下错误 部署失败 因为在应用程序规范文件中输入了无效的版本值 确保您的 AppSpec 文件指定 0
  • 如何从python3中的单行输入读取整数数组

    我想从 python3 中的单行输入读取整数数组 例如 将此数组读取到变量 列表 1 3 5 7 9 我尝试过的 arr input split 但这不会将它们转换为整数 它创建字符串数组 arr input split for i val
  • 使用单独的线型绘制 ggplot2 中的缺失值

    我正在使用 ggplot2 创建线图 但缺少用 NaN 表示的数据 我的线图当前没有在缺失值之间添加任何线 但是 我想用虚线连接缺失的数据 而所有已知的数据用实线连接 这是我当前绘图的代码 其中包含我的数据框的一小部分和下面的绘图图像 ma
  • 同一个测功机可以运行多个进程吗?

    我正在创建运行多个微服务的小型应用程序 我希望这个应用程序 24 7 可用 所以免费的测功时间对我来说还不够 如果我升级到hobby我会得到的计划10 Process Types 我可以在每个进程 Web 上运行另一个微服务吗 或者 Her
  • 双因素认证系统

    我正在尝试使用 SMS 作为第二种身份验证方法来设计一个双因素身份验证系统 在 PHP 上 这是一个测试项目 任何人都可以帮助我设计这项服务吗 这将是一个基于网络的系统 下面是我到目前为止所做的 客户端输入用户名和密码后 网站将向我们的服务
  • 2 个站点共享一个 Web 应用程序池?什么时候应该使用这个?

    我只是做了一个简单的实验 我在本地 IIS 中创建了一个 Web 应用程序池 然后让 2 个网站指向同一个应用程序池 网站不是虚拟的 当然 它们在本地运行正常 我们什么时候应该开始使用共享应用程序池 在什么情况下您应该在两个网站之间共享应用
  • 微软Azure DDOS防护

    我正在 Microsoft Azure 中运行企业级应用程序 我想知道 Microsoft Azure 中 DDOS 投影的建议是什么 该文档明确指出该平台受到 DDOS 保护 但没有提供更多详细信息 我对Azure DDOS的理解是 如果
  • Android onBackPressed() 没有被调用?

    在我的 MainActivity 从 AppCompatActivity 扩展 中 我想重写 onBackPressed 方法 如下所示 Override public void onBackPressed Log d MainActivi