在从 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 。因此,它无法正常工作的原因可以分为三个可能的原因:
- 由于 logcat 控制台中的过滤器错误,日志无法正常工作
- 由于传递的上下文错误,Toast 无法正常工作
- 供应商错误地实现了操作系统。
通常, 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/