savedInstanceState - 可见性更改未恢复?

Posted

技术标签:

【中文标题】savedInstanceState - 可见性更改未恢复?【英文标题】:savedInstanceState - visibility changes not restored? 【发布时间】:2016-06-24 11:11:29 【问题描述】:

据我所知,Activity 会自动保存视图的状态,而 EditTextTextView 之类的东西会自动恢复它们的状态。

这不适用于可见性吗?

例如: 如果默认情况下在 XML 中,我有一个可见的 TextView。 如果我使用 tvInput.setVisibility(View.GONE); 以编程方式将 textview 设置为 GONE

如果重新创建活动,tvInput 不会保持为GONE,它现在在不应该出现时可见。

这是预期的行为吗?我需要自己处理视图可见性吗?

【问题讨论】:

有完全相同的问题。 EditText 的更改值被存储和恢复,但不更改可见性。我最终在 onRestore 中恢复了可见性...尚未阅读很多有关此的文档,并且在涉及 android dev 时相当生疏,我认为这有一些逻辑... 【参考方案1】:

您是否在 XML 文件中为 TextView 设置了 ID?只有具有 id 的视图才会自动恢复其状态。 此外,如果您要覆盖 onSaveInstanceState(...) 和/或 onRestoreInstanceState(...),请不要忘记从调用超类的方法开始:

super.onSaveInstanceState(...);

super.onRestoreInstanceState(...);

还请记住,在 onCreate(...) 中,您的视图尚未恢复。它们只会在以后恢复。

【讨论】:

是的,我必须有它们的 ID,因为我以编程方式将它们设置为 View.GONE。我确实调用了super.onSaveInstanceState,但我没有重写恢复实例方法,所以它应该调用超级方法。 有完全相同的问题。 EditText 的更改值被存储和恢复,但可见性没有改变。

以上是关于savedInstanceState - 可见性更改未恢复?的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView 中的多个视图

WPF 可见性折叠保留空间

更改子类中父方法的可见性范围

Android的onCreate里边savedInstanceState啥时候不为空

RecyclerView中的多个视图

组合关系比依赖关系耦合性更强