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