gpt4 book ai didi

android - fragment - getArguments() 返回一个空包

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:41:28 24 4
gpt4 key购买 nike

希望有人能帮助我理解这一点:

  1. 我正在使用一个单一 Activity 应用程序和许多在同一容器中替换的 fragment ,并且我正在启用“不保留 Activity ”选项的真实设备中测试我的应用程序

  2. 添加新 fragment 时(使用 <a href="https://developer.android.com/reference/android/app/FragmentTransaction.html#replace(int,%20android.app.Fragment,%20java.lang.String)" rel="noreferrer noopener nofollow">FragmentTransaction replace()</a> 方法),我使用的是 <a href="https://developer.android.com/reference/android/app/Fragment.html#setArguments(android.os.Bundle)" rel="noreferrer noopener nofollow">setArguments()</a>将信息传递给新 fragment 的方法。它按预期工作,我可以通过 <a href="https://developer.android.com/reference/android/app/Fragment.html#getArguments()" rel="noreferrer noopener nofollow">getArguments()</a> 获得该信息在那个 fragment 里面。到目前为止一切正常......

  3. 在此之后,我将我的应用程序发送到后台。我看到堆栈中的所有 fragment 都被销毁了,同样符合预期

  4. 我将我的应用带到前台并在 getArguments() 中方法我得到一个空的 Bundle (不是 null,只是一个空对象)而不是我在 #2 中使用的数据

根据 Android 文档,setArguments() 中提供的参数将在 fragment 销毁和创建过程中保留...所以,我的问题是:

  1. “will be retained across fragment destroy and creation”是否包括我描述的场景?

  2. “不保留 Activity ”选项是否会混淆 getArguments()/setArguments()如果启用了?

  3. 除了“不保留 Activity ”选项之外,还有其他方法可以测试正确的 fragment 创建/销毁吗?

  4. 正确保持 fragment 参数“有效”的更好方法是什么?我可以将它们保存在 onSaveInstanceState() 中方法,但想知道除此之外是否还有更多选择。

最佳答案

Activity 和 Fragment 的娱乐性是我们团队特别关注的点之一。所以这是我们想到的一些要点。

  1. “将在 fragment 销毁和创建过程中保留”是否包括我描述的场景?

请记住“不要保留 Activity ”会在您进入后台时破坏您的 Activity 。稍后系统将尝试恢复您的最后状态,自动重新创建最后一个 Activity 及其 fragment 。Android 将保存必要的信息以恢复其最后状态。所以是的,应该涵盖您的场景。

  1. 如果启用“不保留 Activity ”选项,是否会与 getArguments()/setArguments() 混淆?

根据您的流程,您可以尝试一些问题。当 Activity 在 onCreate 方法上重新创建 savedInstanceState 时,将不为空。您应该使用此信息来避免重新创建或重新附加您的 fragment 。系统会尝试为你恢复它,这就是 fragment 不能有任何构造函数的原因。

  1. 除了“不保留 Activity ”选项之外,还有其他方法可以测试正确的 fragment 创建/销毁吗?

使用 FragmentTransaction。

1 - 使用 FragmentTransaction 将您的 fragment 添加到 Activity 中,而不将其添加到后台堆栈。

2 - 使用 FragmentTransaction 将之前的 fragment 替换为其他 fragment (或者可能是之前 fragment 的新实例)。当一个 fragment 被其他 fragment 替换并且它没有被添加到返回堆栈时,android 会销毁它。

  1. 正确保持 fragment 参数“有效”的更好方法是什么?我可以将它们保存在 onSaveInstanceState() 方法中,但想知道除此之外是否还有更多选项。

您可能不需要在代码中保留参数包。安卓会为你做。但最好在 onAttach 方法( fragment 将在屏幕上可用时调用的第一个方法)中恢复包数据并将它们存储为类属性以供以后使用。

关于android - fragment - getArguments() 返回一个空包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597468/

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