在列出片段的细节片段

时间:2014-03-05 11:55:04

标签: android android-fragments

我有两个片段 - 列表和细节。最初我使用

将列表片段加载到活动的容器中
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被调用

有人可以解释一下这样做的方法。

提前致谢!

2 个答案:

答案 0 :(得分:0)

片段中的

onPauseonResume只是onPauseonResumeActivity的反映。

因此,每当您从一个活动转到另一个活动时,第一个活动的所有片段都会调用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();