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

时间:2013-12-02 15:12:50

标签: android android-layout

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

然后我转向用第二个更简单的部分做同样的事情,然后马上注意到我没有做某些事情。此部件的布局在onCreate()中膨胀,它包含TextViews和EditTexts,其内容可以更改。此内容将保留,但布局的动态更改不会。

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

我必须通过Bundle正确实现连续性,因为未保留的是在onCreate()中创建的对应于视图的对象的状态。这一点,以及行为不一致的事实(从主屏幕重新开始与方向改变重新开始)使得很难将其视为“特征”,因为它意味着从XML中膨胀“新鲜”布局可能并不总是提供真正的新鲜与R.layout.whatever完全对应的布局。

我也猜测这可能发生在Activity的可见生命周期中,而不仅仅是onCreate()。那么这里的规则是什么?

1 个答案:

答案 0 :(得分:2)

  

此内容已保留,但布局的动态更改不是

保留用户可变的常见小部件内容,例如输入EditText的文本,是onSaveInstanceState()内置实现的自动内容。但是,"视图...已删除并添加到其中" (来自您问题的上一版)肯定不会被onSaveInstanceState()保留,如果您重新夸大布局,这些更改肯定会丢失。

  

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

嗯,这取决于流程是否仍然存在,以及此活动是否在后台。

  

那么这里的规则是什么?

如果用户返回到您的活动的特定实例(配置更改,或从recent-tasks列表启动新进程),则您保存的实例状态将应用于创建的新活动实例。

如果用户在没有返回活动的特定实例(例如,主屏幕启动器)的情况下开始新进程,则不会应用保存的实例状态。