一个Fragment实例可以遍历两个活动吗?

时间:2016-01-21 16:12:39

标签: android android-fragments android-lifecycle

我一直在分析Android中活动和碎片的生命周期,并提出了一个问题 - 在创建和显示之后,是否可以将一个Fragment实例自动放入新的Activity中?

是否存在一个配置更改方案,该方案会导致Activity重新创建,但是会将Fragments从旧Activity“迁移”到新的?

问题的原因是将Activity作为侦听器传递给其Fragments。我想知道是否有一种情况(除了onSaveInstanceState序列化)这个监听器会丢失。

修改

为了明白我的想法 - 重用Fragment实例是一种不受欢迎的行为。我想确保它不会默认发生。

1 个答案:

答案 0 :(得分:2)

官方Android API中没有任何内容可以允许这样做。有Fragment#setRetainState方法允许Fragments在轮换更改期间比其父Activity更长,但它会重新附加到创建它的活动中。片段基本上由FragmentManager控制,Activity是活动的一部分。如果FragmentManager消失,那么 UPDATE mytablename o INNER JOIN ( SELECT your_ID, ((SUM(IFNULL(PTSD2E_1,0)))+(SUM(IFNULL(PTSD2E_2,0)))+ (SUM(IFNULL(PTSD2E_3,0)))+(SUM(IFNULL(PTSD2E_4,0)))+(SUM(IFNULL(PTSD2E_5,0)))+ (SUM(IFNULL(PTSD2E_6,0)))+(SUM(IFNULL(PTSD2E_7,0)))+(SUM(IFNULL(PTSD2E_8,0)))+ (SUM(IFNULL(PTSD2E_9,0)))+(SUM(IFNULL(PTSD2E_10,0)))) AS PTSD_Total, (SUM(CASE WHEN PTSD2E_1 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_2 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_3 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_4 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_5 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_6 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_7 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_8 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_9 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_10 IS NULL THEN 1 ELSE 0 END)) AS PTSD_Num_Missing FROM mytablename GROUP BY your_ID HAVING PTSD_Num_Missing < 3 ) i ON o.your_ID = i.your_ID SET o.PTSD_Total = i.PTSD_Total ; 也会消失。

现在,您可以将片段的引用保留在Activity的生命周期之外。例如,在应用程序或Fragment类本身的某处保留Fragment的静态引用,但这会引起如此多的麻烦。它超出了他们的使用范例,最好甚至不去考虑。

我认为唯一真正的解决方案是将Fragment状态保存在包含Fragment理解的各种参数的Bundle中。您可以将此包从Activity转移到Activity,Fragments可以根据Bundle状态重建自己。这听起来也很麻烦,但可以做到。