PreferenceActivity значок активной панели действий не вернется домой (в отличие от ET :)

Моя PreferenceActivity отлично работает, за исключением одной вещи. Значок ActionBar, который отлично возвращает пользователя к предыдущему действию во всех моих других действиях, не работает в PreferenceActivity. Когда я нажимаю значок, он мигает, как если бы он возвращался к предыдущему действию, но PreferenceActivity остается на экране. Интересно, что кнопка назад возвращает пользователя к предыдущему действию. Есть ли способ, чтобы значок «Главная» ActionBar работал «нормально» в PreferenceActivity?

Вот код:

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set actionBar controls for Settings TextView actionBarTitle = (TextView) findViewById(Resources.getSystem().getIdentifier("action_bar_title", "id", "android")); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setIcon(R.drawable.ic_launcher); actionBar.setDisplayShowTitleEnabled(true); actionBarTitle.setTextColor(Color.WHITE); actionBarTitle.setTextSize(16); actionBar.setTitle(R.string.settings_menu_title); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { //Build.VERSION_CODES.ICE_CREAM_SANDWICH actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); // show back arrow on title icon actionBar.setDisplayShowHomeEnabled(true); } ...... Handle prefs (all working fine)..... } 

}

////// И вызывающий код ////////

  //Use menu button to access settings screen @Override public boolean onKeyDown(int keycode, KeyEvent e) { switch(keycode) { case KeyEvent.KEYCODE_MENU: Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); return true; } return super.onKeyDown(keycode, e); } // [END onKeyDown (for menu click capture) ] 

Спасибо @Axarydax за то, что указали мне в правильном направлении. Я понял, что PreferenceActivity отличается от других моих действий, поскольку кнопка «Главная» возвращается к вызывающей активности, а не к MainActivity. Поэтому для решения необходимо (1) использовать startActivityForResult (вместо startActivity), чтобы вызвать PreferenceActivity и (2), используя onOptionsItemSelected в PreferenceActivity для управления возвратом (за ответ @ Axarydax). Оба (1) и (2) показаны ниже:

  // (1) Menu button used to access PreferenceActivity @Override public boolean onKeyDown(int keycode, KeyEvent e) { switch(keycode) { case KeyEvent.KEYCODE_MENU: Intent intent = new Intent(this, SettingsActivity.class); startActivityForResult(intent, 1); //enables return to here return true; } return super.onKeyDown(keycode, e); } // (2) Return to calling activity from PreferenceActivity @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { int SUCCESS_RESULT=1; setResult(SUCCESS_RESULT, new Intent()); finish(); //return to caller return true; } return false; } 

Переопределить onOptionsItemSelected в вашей деятельности, он будет вызываться, когда значок будет нажат с идентификационным значением android.R.id.menu

 @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { //do your code return true; } return false; }