2014-11-20 175 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

相關問題