2013-03-02 72 views
9

我的PreferenceActivity工程很棒,除了一件事情。 ActionBar圖標完美地將用戶返回到我所有其他活動中的上一個活動,但無法在PreferenceActivity中使用。當我點擊圖標時,它會閃爍,好像它將返回到上一個活動,但PreferenceActivity保持在屏幕上。有趣的是後退按鈕確實將用戶返回到前一個活動。有沒有辦法讓PreferenceActivity中的ActionBar的主頁圖標「正常」工作?PreferenceActivity操作欄主頁圖標將不會返回(不像ET :)

下面是代碼:

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) ] 
+0

+1如果無非偷偷溜進去 – Simon 2013-03-02 08:05:29

+0

如何將getActionBar在你的onCreate()的工作,如果你是從PreferenceActivity延伸出的ET參考更多? – 2013-11-19 21:44:44

回答

12

感謝@Axarydax指引我朝着正確的方向前進。我意識到PreferenceActivity 與我的其他活動不同,因爲主頁按鈕返回到而不是MainActivity,而是調用活動。因此,解決方案需要(1)使用startActivityForResult(而不是startActivity)來調用PreferenceActivity和(2)使用PreferenceActivity中的onOptionsItemSelected來管理返回(per @ 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; 
} 
4

覆蓋onOptionsItemSelected在活動,當圖標點擊ID值爲android.R.id.menu

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