我有两个片段 - 列表和细节。最初我使用
将列表片段加载到活动的容器中FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, listingFrag);
ft.commit();
在点击列表片段中的项目时,我使用
加载详细信息片段FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, detailFrag);
ft.addToBackStack(null);
ft.commit();
在加载详细信息片段时,我没有得到列表片段的onPause调用。我也没有从详细信息片段返回列表片段的onResume调用(使用系统后退按钮)。
此外,当我在详细信息片段中时,将应用程序置于后台会调用列表和详细信息片段的onPause。从后台获取应用程序后,将调用onResume列表和详细信息屏幕。
上述行为非常出乎意料。 我想要 1)列出片段的onResume从列表屏幕回来调用 2)列出片段的onPause以在加载细节片段上调用 3)当应用程序放到后台时,只有详细片段的onPause被调用 4)当应用程序从后台返回时,只有详细片段的onResume被调用
有人可以解释一下这样做的方法。
提前致谢!
答案 0 :(得分:0)
onPause
和onResume
只是onPause
中onResume
和Activity
的反映。
因此,每当您从一个活动转到另一个活动时,第一个活动的所有片段都会调用onPause
,第二个活动的所有片段都会调用onResume
。
此功能不适用于片段可见/添加或删除。
答案 1 :(得分:0)
当您显示详细片段时,添加它意味着列表和详细片段同时处于活动状态。因此,他们都会收到onPause()
和onResume()
。
您应该尝试使用详细信息片段替换列表片段。这将导致列表片段中的onPause()
,并且一次只有一个片段处于活动状态。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, listingFrag);
ft.addToBackStack(null);
ft.commit();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, detailFrag);
ft.addToBackStack(null);
ft.commit();