在从 AppCompatActivity 扩展的 MainActivity 中,我想像这样覆盖 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()
。如果有人将 super.onBackPressed()
注释掉,onBackPressed()
也可以使用。
正如提问者所写,他不会使用 super.onBackPressed()
因为它会关闭活动。因此,导致它无法正常工作的原因可以分为三个可能的原因:
通常,toast 通过传递正确的上下文来工作。在提问者的情况下,只需传递 this
。
@Override
public void onBackPressed() {
Log.d("MainActivity","onBackPressed");
Toast.makeText(this,"onBackPressed",Toast.LENGTH_SHORT).show();
}
对于日志,只需在 logcat 上设置正确的过滤器。
我不在乎现在是否有人投反对票,但其他初学者必须清楚,不能使用 super.onBackPressed()
。
无论如何,使用 onKeyDown()
也是一种解决方案。