我一直在分析Android中活动和碎片的生命周期,并提出了一个问题 - 在创建和显示之后,是否可以将一个Fragment实例自动放入新的Activity中?
是否存在一个配置更改方案,该方案会导致Activity重新创建,但是会将Fragments从旧Activity“迁移”到新的?
问题的原因是将Activity作为侦听器传递给其Fragments。我想知道是否有一种情况(除了onSaveInstanceState序列化)这个监听器会丢失。
修改
为了明白我的想法 - 重用Fragment实例是一种不受欢迎的行为。我想确保它不会默认发生。
答案 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状态重建自己。这听起来也很麻烦,但可以做到。