我有3个活动:A,B和C,代表3页的网络表单。 A是B的父活动,B是C的父活动。我已使用staging
正确实现了向上导航。当我有信息是A,B中的信息和C中的信息时,我在活动C中点击回来,并显示来自活动B的信息。然后我再次点击回来,显示来自活动a的信息。
然后当我从活动A转到活动B时出现问题。当然,我在第二页上保存的信息我希望在那里,但它重新创建活动B并且所有信息都丢失了。如何使活动B恢复,不要让活动被破坏。我在文档中读到,当使用向上导航时,当前活动被销毁并且后台堆栈中的活动被恢复。我不知道如何实现这一点。
非常感谢任何帮助。
编辑:更直观地表达我想要的内容。这来自文档:
如图所示,当当前活动为活动3时按下后退时,活动3将被销毁。我不希望这种情况发生。可以保存活动3,以便以后可以恢复吗?
答案 0 :(得分:1)
来自docs
的解决方案同样,如果您向上导航到当前堆栈上的活动,则行为由父活动的启动模式确定。如果父活动具有启动模式singleTop(或up intent包含FLAG_ACTIVITY_CLEAR_TOP),则父项将被置于堆栈顶部,并保留其状态。导航意图由父活动的onNewIntent()方法接收。如果父活动具有启动模式标准(并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP),则当前活动及其父活动都将从堆栈弹出,并且创建父活动的新实例以接收导航意图。
回答您的整体问题否
你从A
转到B
;然后从B
返回A
,您希望保留B
吗?返回B
继续执行任务的概率是多少 - 因此它将被杀死并重新启动。
要提供某种解决方案,请使用已弃用的ActivityGroup
或(我不确定这是否有效) - 将launchmode="singleTop"
更改为singleInstance
并覆盖其onBackPressed()
}启动一个新的Activity调用引发它的Activity - 你可以得到getIntent()
引发它的Activity ..这里的逻辑是singleInstance驻留在一个不同的Task中,并且不允许其中的其他Activity,所以它杀死它的条件,它不会死,当一个新的活动被引发,并且因为你的接收活动有它的lauchmode和它的根你在那里没有问题。 overBiding onBackPressed是为了防止正常流动..
希望这次有所帮助,但整体不