2013-03-02 31 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; 
} 
时将被调用