这是我遇到的问题。我有一个活动A有一个片段F,它包含在FragmentPagerAdapter FPA中,在视图V中。(A-> V-> FPA-> F)你可以在onDestroy()中分离一个片段吗?
当A被破坏时(或在此情况,换出),F被附加,并在FPA中,这是在V.然而,当A被重新创建(例如有人点击后退按钮回到活动,例如),V和FPA不存在,所以F被重新创建(处于附加状态!),但是对于不存在的东西,所以它不在视图层次结构中。然后,当FPA试图在这个片段上实例化状态时,它会尝试附加它,它什么都不做,因为它已经连接到了空气中。
显然有一些方法可以解决这个问题(例如,在活动的onCreate中存在V和FPA,以便片段在创建时可以到达某处),但是我想继续懒洋洋地只在需要时才创造FPA和V.因此,似乎更新F的状态以在onDestroy()中分离将是可取的。然而,state保存在onPause()中,这意味着我在这里有点不走运。
有没有办法在A的onDestroy()中更新F的保存状态?有没有办法说“如果活动被破坏,不要补充这个片段”?有没有其他明显的思考方式,我不考虑?感觉就像我在这里以错误的方式处理事情。
噢 - 这是一个很好的资源trictive解决方案。绝对不适用于我的活动,该活动具有需要恢复的其他片段(不在FragmentPagerAdapter中)。 – secureboot
为了在使用此解决方案时仍然保留某些片段的状态,我所做的是以编程方式将碎片状态保存在Activity的状态包中。在Activity的onSaveInstanceState()中,我调用Fragment的onSaveInstanceState()来允许Fragment将其状态添加到Bundle中。在Activity的onCreate()中,我以编程方式创建并添加片段,然后将Bundle传递给Fragment.setArguments()。片段通过其onCreate()中的getArguments()从Bundle中检索已保存的状态,并忽略传递给其onCreate()的Bundle。 – Trevor