【问题标题】:Does fragment onCreateView need to account for restore?片段 onCreateView 是否需要考虑恢复?
【发布时间】:2014-06-13 03:16:09
【问题描述】:

这实际上是关于生命周期的两个问题。

1) 在 Fragment.onCreateView(LayoutInflater, ViewGroup container, Bundle) 中,我看到的所有示例都只是使用 LayoutInflater 来为 View 充气,然后返回它。如果这是恢复的一部分,即非空包,视图层次结构的恢复不应该由系统处理吗?我应该调用 container.findViewById() 还是尝试将视图拉出 Bundle 或其他东西(为了拉出对子视图的引用)?

2) 通常,是否有任何 Fragment 生命周期回调需要担心保存/恢复其视图层次结构的状态,即使是通过调用 super.onXXX() 隐式调用?或者,当它调用 super.onCreate(Bundle) 时,所有这些都是由拥有的 Activity 处理的?

【问题讨论】:

    标签: android android-fragments android-lifecycle


    【解决方案1】:
    1. 虽然框架自己负责重新创建Fragment,但必须手动重新创建视图层次结构。视图无法在Activity 的破坏中幸存下来(另外,由于onCreateView() 有你的实现,你可以有条件地膨胀另一个布局或做不同的事情——这就是它每次都必须运行的原因)。 Bundle 包含由onSaveInstanceState() 放置的信息,但旧视图不是其中的一部分。

    2. 如果视图 id 在新旧布局之间匹配,则应自动恢复状态(通过 super 调用)。为此,视图会覆盖它们自己的onSaveInstanceState()。如果您将自定义状态保存在 fragment 的 onSaveInstanceState(),那么您也有责任恢复它。

    【讨论】:

    • 啊,这对我来说更有意义。我也被这个答案搞混了一点:stackoverflow.com/questions/7951730/… - 所以在我看来,虽然片段可能需要存储和重新查找,但视图总是新的?
    • 是的。简而言之,每当一个活动被销毁时,它的视图也会被销毁。
    猜你喜欢
    • 2019-09-09
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多