除了一件事外,我的PreferenceActivity效果很好。 ActionBar图标无法完美地使用户返回到我所有其他 Activity 中的上一个 Activity ,在PreferenceActivity中不起作用。当我单击该图标时,它闪烁,好像要返回到上一个 Activity ,但PreferenceActivity停留在屏幕上。有趣的是,后退按钮的确使用户返回了上一个 Activity 。有没有一种方法可以使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与其他 Activity 不同,因为“主页”按钮返回到调用方Activity而不是MainActivity。因此,解决方案需要(1)使用startActivityForResult(而不是startActivity)来调用PreferenceActivity,以及(2)使用PreferenceActivity中的onOptionsItemSelected来管理返回值(根据@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;
}
关于android - PreferenceActivity操作栏主页图标不会返回主页(与ET :)不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15172111/