出于某种原因,我的理解是无头片段在你的申请期间存在。有了这个理解,在我试图在startActivityForResult()之间保持一个对象时,我把对象放在像这样的无头片段中
private HeadlessFragment modelFragment;
modelFragment = (HeadlessFragment)
getSupportFragmentManager().findFragmentByTag(Constants.HEADLESS_FRAGMENT_TAG);
if (modelFragment == null){
modelFragment = new HeadlessFragment();
}
modelFragment.setInvoice(invoice);
我可以确认自定义对象已设置,但是当我转到下一个活动并尝试通过调用具有相同标记的findFragmentByTag来获取相同的对象时,该对象为空。
无头碎片是否在两个活动生命周期之间存活?我确实在那个Headless Fragment上设置了setRetainInstance(true)。我希望我不必在我的自定义对象上实现Parceable。
答案 0 :(得分:0)
出于某种原因,我的理解是无头片段在你的申请期间存在。
没有。片段由活动拥有,而不是应用程序范围的构造。
我可以确认自定义对象已设置,但是当我转到下一个活动并尝试通过调用具有相同标记的findFragmentByTag来获取相同的对象时,该对象为空。
至少有两个原因:
首先,至少在您展示的代码中,您永远不会通过FragmentManager
将片段添加到FragmentTransaction
。因此,创建片段的活动将无法通过findFragmentByTag()
找到该片段,因为FragmentManager
不了解该片段。
其次,每个活动都有自己的FragmentManager
,一个活动的碎片在另一个活动中无法访问。
我希望我不必在自定义对象上实现Parceable。
然后不要传递对象。传递其他活动可以通过其检索对象的信息(例如,密钥或ID)(从单个POJO缓存,通过查询数据库等)。
或者,不要将它们作为单独的活动,而是将它们作为一个活动中的单独(常规)片段。
或者,实施Serializable
,但Parcelable
执行得更快。