为什么onBackPressed()不被调用?

我试图重写onBackPressed()。 但是,当我点击操作栏中的后退button时,它似乎没有检测到。

我目前有这样的代码:

@Override public void onBackPressed() { Log.i("DATA", "Hit onBackPressed()"); super.onBackPressed(); } 

日志消息从不出现在LogCat中。 我知道这个日志语句是有效的,因为它是从另一个方法复制的,并且在LogCat中显示不同的消息。

我已经search的答案,我已经尝试使用onKeyDown,并检测是否是后退button被点击,但我仍然有同样的问题。 有关该项目的信息:

  • Android Studio 0.9.3
  • 方法位于空白活动
  • 目标sdk 21
  • 最低sdk 15
  • testing设备是三星Galaxy 5(不是仿真器)

任何帮助将不胜感激!!

编辑:

这是我工作代码的副本(这是testing代码,所以活动名称不是描述性的):

 public class MainActivity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity2); getActionBar().setDisplayHomeAsUpEnabled(true);//Displays the back button } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main_activity2, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Log.i("DATA", "Hit Actionbar Back Button"); return true; default: return super.onOptionsItemSelected(item); } } } 

LogCat中现在出现消息“Hit Actionbar Back Button”。

Solutions Collecting From Web of "为什么onBackPressed()不被调用?"

当用户点击硬件后退button(或导航栏中的“向上”button)而不是操作栏中的button时,会调用onBackPressed() 。 对于这个你需要重写onOptionsItemSelected()方法。 例:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // click on 'up' button in the action bar, handle it here return true; default: return super.onOptionsItemSelected(item); } } 

请试试这个代码,

 public class MainActivity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onBackPressed() { // TODO Auto-generated method stub super.onBackPressed(); Toast.makeText(getApplicationContext(), "back press is call", Toast.LENGTH_LONG).show(); } }