2017-05-26 58 views
0

当我使用意图从父活动移动到另一个,然后使用操作栏导航回到父母时,父活动已经失去了我所有的更改和值(作为用户),并返回到默认的xml显示我有它。家长活动继续从孩子回来时重新设置

我有这些在我的孩子活动的OnCreate:

ActionBar actionBar = getSupportActionBar(); 
actionBar.setHomeButtonEnabled(true); 
actionBar.setDisplayHomeAsUpEnabled(true); 

而且appropiately标记我父活动:

android:parentActivityName=".MainActivity" 

什么我需要让存储或活动之间旅行时记得那些变化?

回答

1

在manifest文件中,你应该设置机器人:launchMode这样的:

<!-- ACTIVITY --> 
     <activity 
      android:name=".activities.MainActivity" 
      android:configChanges="orientation|screenSize" 
      android:launchMode="singleTask" 
      android:screenOrientation="portrait"/> 

PS:这个链接阅读启动模式: https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en

+0

太好了! “singletop”发射模式的其他人建议也起作用,但它认为在阅读了您提供的材料后,“singleTask”是最合适的发射模式。感谢您的答案,其他信息阅读:) – Destreation

+0

@Destreation实际上,使用'singleTask'启动模式应该只用于非常特殊的情况下(比如在HOME屏幕替换中),而不是像这样的标准导航情况。这里'singleTop'的使用应该足以返回到'MainActivity'的现有实例。 'singleTask'启动模式伴随着一系列奇怪的行为,可能会在未来造成很大的痛苦。阅读[提供UP导航](https://developer.android.com/training/implementing-navigation/ancestral.html) –

+0

@DavidWasser:你能解释一下“奇怪的行为”吗? – MrTy

1

有几个选项来尝试 -

1)开始startActivityForResult()

2在清单文件中的新的活动),设置父活动android:launchMode="singleTop"

希望它可以帮助

0

当您单击导航按钮时,您可能正在创建父母的新实例。一个简单的方法就是完成你的活动,这样就可以简单地恢复后台堆栈中的任何活动。

事情是这样的:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
}