这实际上是关于生命周期的两个问题 .
1)在Fragment.onCreateView(LayoutInflater,ViewGroup容器,Bundle)中,我看到的所有示例都只是使用LayoutInflater来扩展View,然后返回它 . 如果这是Restore的一部分,即非null Bundle,那么系统不应该处理视图层次结构的恢复吗?我是应该调用container.findViewById()还是尝试将视图拉出Bundle或其他东西(为了拉出对子视图的引用)?
2)通常,任何Fragment生命周期回调都需要担心保存/恢复其视图层次结构的状态,甚至可以通过调用super.onXXX()隐式地进行调用吗?或者当它调用super.onCreate(Bundle)时,所有处理都由拥有的Activity处理?
1 回答
虽然框架负责重新创建
Fragment
本身,但必须手动重新创建视图层次结构 . 视图无法在他们的Activity
的破坏中存活下来(加上,因为onCreateView()
有你的实现,你可以有条件地膨胀另一个布局或做不同的事情 - 这就是为什么它必须每次都运行) . Bundle包含由onSaveInstanceState()
放置的信息,但旧视图不是它的一部分 .如果视图ID在旧布局和新布局之间匹配,则应自动恢复状态(通过超级调用) . 视图会覆盖自己的
onSaveInstanceState()
. 如果您在 fragment'sonSaveInstanceState()
中保存自定义状态,那么您还要负责恢复它 .