活动A ===点击按钮===>活动B
按下后退按钮时,不会重新创建活动A.
按home键作为向上按钮时,将重新创建活动A.
所以我在A.onSaveInstanceState(Bundle outState)时保存状态 ,并在A.onRestoreInstanceState(Bundle savedInstanceState)时使用状态。
保存和使用工作正常(除了主页作为向上按钮)
然而,
当按下向上按钮时, 系统重新创建活动A,并且savedInstanceState消失了。
如何使用已保存的实例状态?
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// I do not want this...
// Home as up button is to navigate to Home-Activity not previous acitivity
super.onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:53)
在onCreate()中启用主页按钮。
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
在onOptionItemSelected()方法中执行此操作。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
这应启用向上导航。如果希望使用savedInstanceState还原父活动。您应该在清单文件中的父活动中设置launchMode="singleTop"
。
有关详细信息,请查看http://developer.android.com/: Providing Up Navigation
答案 1 :(得分:28)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
我使用了结束() NavUtils ;
答案 2 :(得分:0)
正如@Joachim 在评论中提到的,R.id.home
和 android.R.id.home
之间存在差异。就我而言,我一直在使用 R.id.home
,但它不起作用,而 android.R.id.home
确实起作用。