android开发分享何时使用FragmentManager :: putFragment和getFragment

我有一个应用程序使用片段,我正在玩如何在一个活动中使用同一个片段,双窗格和一个活动作为一个独立的。 仍然不确定完成这个最好的方法,但我注意到FragmentManager有一个putFragment和getFragment函数。 我感到困惑的是,你必须提供一个Bundle作为参数来获取和放置函数。 如何分开活动有相同的捆绑? 显然你可以通过捆绑作为参数,但在这一点上,我觉得你只是把事情弄得一团糟。

那么使用getFragment和putFragment的好方法是什么? 请包括Bundle参数说明。

    基本答案:

    这些仅在实现onSaveInstanceState()并在onCreate()中恢复该状态时才有用。 如果你没有实现onSaveInstanceState(),你可以忘记这些方法,并假装他们不存在。

    他们正在解决的问题是:如果你想在“保存的实例状态”中保存一个片段的引用,你不能只把一个对象引用放在那里。 首先,因为你不能把普通的对象放在Bundle中。 :)原因是保存状态的目的是将它复制出你的进程,所以如果你的进程需要被终止,它可以被复制回到一个新的进程中, – 从您的活动/片段初始化。 原始对象只在运行它的进程的上下文中有意义,因此不可能正确地将引用从当前进程复制到另一个进程中。

    那么putFragment()/ getFragment()所做的就是在给定的Bundle中放置一段数据,以便在另一个进程中将该片段标识为您的活动/片段的新实例。 到底什么是这种表示是没有定义的,但在当前实现中,它是该片段的内部整数标识符,稍后将在FragmentManager需要从之前保存的状态重新创build该片段时使用它…用相同的标识符重新创build,所以当你调用getFragment()它可以检索整数,并使用它来确定正确的Fragment对象返回到与以前保存的对应的调用方。

    简而言之,只有在Activity恢复后才能检索片段的引用。 例如,当您创build一个片段并在整个活动中使用它时,所以在configuration更改之后,您的活动将被重新创build,您需要重新引用该片段。 所以

     public void onSaveInstanceState(Bundle outState){ getFragmentManager().putFragment(outState,"myfragment",myfragment); } public void onRetoreInstanceState(Bundle inState){ myFragment = getFragmentManager().getFragment(inState,"myfragment"); } 

    你有一个很好的解释是什么put|getFragment可以在这个android组线程中使用 。

    虽然整个线程很有趣,但是对于你的问题的真正答案是由Dianne Hackborn“

    您还可以利用FragmentManager API将一个片段“指针”保存在一个包中,稍后将其检索到,以允许您维护跨状态保存/恢复的直接指针。

    以上就是android开发分享何时使用FragmentManager :: putFragment和getFragment相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/512970.html

      (0)
      上一篇 2020年11月27日
      下一篇 2020年11月27日

      精彩推荐