【问题标题】:Detail fragment over listing fragment列表片段上的详细信息片段
【发布时间】:2014-03-05 11:55:03
【问题描述】:

我有两个片段 - 列表和详细信息。最初,我使用

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

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

提前致谢!

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    片段中的onPauseonResume只是Activity中的onPauseonResume的反映。

    所以每次你从一个活动转到另一个活动时,第一个活动的所有片段都会调用onPause,第二个活动的所有片段都会调用onResume

    此功能不适用于片段可见/添加或删除。

    【讨论】:

    • 感谢您的回复!!你知道其他方法来实现我想要做的事情吗?
    【解决方案2】:

    当您显示详细片段时,您添加了它,这意味着列表和详细片段同时处于活动状态。因此他们都收到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();
    

    【讨论】:

    • 我也确实想到了这个选项。但这对我没有帮助,因为我正在其 onCreateView 中下载列表屏幕的内容。因此,如果当我从详细信息返回时替换列表片段,它将重新下载所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2013-08-11
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多