gpt4 book ai didi

android - 如何使用 setRetainInstance(boolean)?

转载 作者:行者123 更新时间:2023-11-29 00:07:54 25 4
gpt4 key购买 nike

假设我有一个 fragment A。它有一个实例变量 mViewPager 指向它的 ViewPager

Fragment AonCreate(Bundle) 中,我调用了 setRetainInstance(true)

方向改变时:

  1. onCreateView(LayoutInflater, ViewGroup, Bundle) 被调用,一个新的 View 被放大。所以,我在新膨胀的 View 中有一个新的 ViewPager

  2. mViewPager 在方向改变时指向原来的 ViewPager

我的问题是:如何让 (1) 中的新 ViewPager 与 (2) 中保留的 mViewPager 相关联?

或者我应该只使用 onSaveInstanceState(Bundle)

最佳答案

@Selvin 的评论所述,您应该重新创建 UI 元素。

一些你应该知道的信息:

setRetainInstance(true) 应该只用于非 UI fragment 。我个人的建议是不要首先考虑这一点,除非您别无选择。

To properly handle a restart, it is important that your activity restores its previous state through the normal Activity lifecycle, in which Android calls onSaveInstanceState() before it destroys your activity so that you can save data about the application state. You can then restore the state during onCreate() or onRestoreInstanceState().

您使用onSaveInstanceState(Bundle) 是正确的,一般来说,您应该使用它来保存您的状态。请注意,这是您保存的状态,而不是 UI 或整个 Fragment。

例如,状态可以是按钮被点击次数的计数。查看下面关于如何保存状态的链接

http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState

此外,一些 UI 状态,例如在 EditText 中输入的文本已经在系统 API 中处理。所以你只需要处理你自己维护的状态。

编辑:

如果您是新手,不知道需要保存什么,不需要保存什么,请先跳过它,然后在不使用 onSaveInstanceState 的情况下尝试改变方向。然后你很快就会发现在这个过程中丢失了什么,那将是你需要保持的状态。

关于android - 如何使用 setRetainInstance(boolean)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32475126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com