Android 如何在onCreate()等中回收膨胀的布局?

Android 如何在onCreate()等中回收膨胀的布局?,android,android-layout,Android,Android Layout,我有一个界面,有两个动态部分,其中一个比另一个复杂。我不得不花一些时间处理bundle和onSaveInstanceState()等,以便在方向更改时保留第一个零件的状态 然后我转向第二个更简单的部分做同样的事情,我马上发现我不必做某些事情。此部件的布局在onCreate()中展开,其中包含内容可以更改的文本视图和编辑文本。将保留此内容,但不会对布局进行动态更改 通过从主屏幕重新启动应用程序调用onCreate()时,更改不会保留 无论如何,我必须通过Bundle正确地实现连续性,因为没有保留的

我有一个界面,有两个动态部分,其中一个比另一个复杂。我不得不花一些时间处理bundle和
onSaveInstanceState()
等,以便在方向更改时保留第一个零件的状态

然后我转向第二个更简单的部分做同样的事情,我马上发现我不必做某些事情。此部件的布局在
onCreate()
中展开,其中包含内容可以更改的文本视图和编辑文本。将保留此内容,但不会对布局进行动态更改

通过从主屏幕重新启动应用程序调用
onCreate()
时,更改不会保留

无论如何,我必须通过Bundle正确地实现连续性,因为没有保留的是在
onCreate()
中创建的与视图对应的对象的状态。这一点以及行为不一致(从主屏幕重新启动与方向更改)的事实使得很难将其视为“功能”,因为这意味着从XML中膨胀“新”布局可能并不总是提供与R.layout完全对应的真正新的布局

我还猜测这可能发生在活动的可见生命周期的上下文中,而不仅仅是onCreate()。那么这里的规则是什么

将保留此内容,但不会对布局进行动态更改

通过
onSaveInstanceState()
的内置实现,自动保留常见小部件的用户可变内容,如输入到
EditText
中的文本。但是,
onSaveInstanceState()
绝对不会保留“视图…从中删除并添加到其中”(来自您问题的上一版本),如果重新膨胀布局,则这些更改肯定会丢失

通过从主屏幕重新启动应用程序调用onCreate()时,更改不会保留

那么,这将取决于流程是否仍然存在,以及此活动是否在后台堆栈上

那么这里的规则是什么

如果用户返回到活动的特定实例(配置更改或从“最近的任务”列表启动新流程),则保存的实例状态将应用于创建的新活动实例


如果用户正在启动一个新流程,而没有返回到您活动的特定实例(例如,主屏幕启动器),没有可应用的已保存实例状态。

您是否有为您的活动偶然声明的
android:configChanges
?@kiruwka没有。我意识到我错了,动态布局更改被保留了——只是TextView/EditText内容。请注意,在XML布局中,它们没有任何默认文本。+1很高兴知道
super.onSaveInstanceState()
为您保存文本。它是否有文档记录(源代码除外)?谢谢。我注意到,如果我不调用
super.onSaveInstanceState()
,更改将不会保留。这也解决了它在可见生命周期内发生的潜在问题。@kiruwka:不,保存内容的确切名册没有记录在任何地方。一般来说,它是用户可以改变的东西(例如,
CompoundButton
)的检查状态。@commonware我只是想知道你是怎么偶然通过偶尔看一下android代码就知道这一点的?