【发布时间】:2017-01-24 17:57:17
【问题描述】:
在从 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;
}
}
编辑:我说的是硬件后退按钮(不是操作栏)
【问题讨论】:
-
使用 onKeyDown 方法来覆盖返回操作
-
...您可以轻松地将该代码放入
onBackPressed()中,无需onKeyDown。来自文档:Called when the activity has detected the user's press of the back key. The default implementation simply finishes the current activity, but you can override this to do whatever you want.这种行为肯定还有其他问题。 -
@Steve:你是否为返回按钮覆盖了
onKeyDown?因为如果您在代码中的任何地方执行此操作,可能您还没有返回 true 并且不会调用onBackPressed.... -
您的 onBackPressed() 方法运行良好。问题不存在
-
@Opiatefuchs Log 和 Toast 都不起作用,但我现在切换到 onKeyDown 方法并且它起作用了。
标签: java android android-activity overriding back