在我的 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()
因为它会关闭该活动。因此,它不起作用的原因可以分为三个可能的原因:
- 由于 logcat 控制台中的过滤器错误,日志无法工作
- 由于传递的上下文错误,Toast 不起作用
- 供应商实施了错误的操作系统。
通常,吐司通过传递正确的上下文来工作。对于提问者来说,只需传递this
.
@Override
public void onBackPressed() {
Log.d("MainActivity","onBackPressed");
Toast.makeText(this,"onBackPressed",Toast.LENGTH_SHORT).show();
}
对于日志,只需在 logcat 上设置正确的过滤器即可。
我不在乎现在是否有人投反对票,但对于其他初学者来说必须清楚的是,super.onBackPressed()
不得使用。
无论如何,使用onKeyDown()
也是一个解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)