2014-11-20 205 views
7

我正试图重写onBackPressed()。但是,当我单击操作栏中的后退按钮时,它似乎无法检测到。为什么onBackPressed()没有被调用?

我现在有这样的代码:

@Override 
public void onBackPressed() { 

    Log.i("DATA", "Hit onBackPressed()"); 
    super.onBackPressed(); 

} 

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

我已经搜索了答案,并且我尝试过使用onKeyDown并检测它是否被单击的BACK按钮,但我仍然有同样的问题。 有关该项目的信息:

  • 的Android 0.9.3工作室
  • 方法位于空白活动
  • 目标SDK 21
  • 最低SDK 15
  • 测试设备是三星Galaxy 5(不模拟器)

任何帮助将不胜感激!

编辑:

这是我的工作代码的副本(这是测试代码,这样的活动名称不是描述):

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。

+0

'在行动bar.'后退按钮,因为在动作条按钮不是后退按钮。这是'上'按钮。请参阅http://developer.android.com/training/implementing-navigation/ancestral.html – njzk2 2014-11-20 17:28:08

回答

18

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); 
    } 
}  
+2

它不一定是硬件按钮,它也适用于导航栏中的软返回按钮。 – Lars 2014-11-20 17:20:06

+0

@Lars哎呀,好评!我到目前为止所有的Android手机都有硬件导航按钮,因此我总是会忘记导航栏中的按钮。 – aga 2014-11-20 17:22:32

+0

这工作完美。谢谢! – kkimble006 2014-11-20 18:17:38

0

请试试这个代码,

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(); 
} 
} 
+0

吐司仍然没有出现。 @aga有正确的答案。谢谢! – kkimble006 2014-11-20 18:18:15

+0

@ kkimble006你可以请你分享你的活动完整的代码。 – 2014-11-20 18:19:54

+0

我已经发布了我的工作活动的完整代码@KrunalI – kkimble006 2014-11-20 18:43:09

相关问题