java - Android onBackPressed() 没有被调用?

标签 java android android-activity overriding back

在从 AppCompatActivity 扩展的 MainActivity 中,我想像这样重写 onBackPressed 方法:

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

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

我的其余 Activity 如下所示:

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() 时起作用。

正如提问者所写,他不会使用 super.onBackPressed() 因为它会关闭 Activity 。因此,它无法正常工作的原因可以分为三个可能的原因:

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

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

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

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

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

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

关于java - Android onBackPressed() 没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532594/

相关文章:

android - android 应用程序中的 process.waitFor() 返回 "1"

android - 根据所选选项卡显示和隐藏 ActionBar 中的项目

java - 将字符串从一个 fragment 传递到另一个 fragment

java - 如何在按钮上获得鼠标悬停/弹出效果?

java - 如何在 JPA 中注释这个复杂的连接?

android - 如何向具有 Intent 的 Activity 发送额外内容?

android - 使用先前启动的 Activity 转换恢复 Activity 时查看可见性状态丢失

java - R 中的 MemoryError while read.xlsx

java - 为什么我的paintComponent 方法会在我的JButton 上进行绘制?如何使 JPanel 上同时具有 JButton 和图形?

android - 离开 Activity 后 WebView 似乎没有被销毁?