当前位置: 首页 > 知识库问答 >
问题:

片段生命周期-显示/隐藏时调用哪个方法?

熊哲圣
2023-03-14

我正在使用以下方法通过显示/隐藏片段(在我的NavigationDrawer中)在片段之间切换。

protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if ( lastTag != null && !lastTag.equals("")) {
            Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag );
            if ( lastFragment != null ) {
                transaction.hide( lastFragment );
            }
        }

        if ( fragment.isAdded() ) {
            transaction.show( fragment );
        }
        else {
            transaction.add( container, fragment, tag );
        }

        if ( addToBackStack ) {
            transaction.addToBackStack( tag );
        }

        transaction.commit();

        // set the active tag
        activeFragTag = tag;
    }

我不清楚的是,当我显示或隐藏碎片生命周期的哪个方法被调用?(由于没有onShow()或onHide()这样的方法,我不太确定该使用什么)。我想在显示和隐藏某个片段时执行特定的操作。

共有1个答案

韦睿
2023-03-14

与活动生命周期类似,Android在片段可见时调用onStart()。onstop()通常在片段不可见时调用,但也可以在以后调用。

根据您的布局,Android甚至可以调用onstart(),即使您的片段还不可见,但它属于可见的父容器。例如,这对于android.support.v4.view.viewpager是有效的,它要求您重写fragment.setUserVisibleHint()方法。在任何情况下,如果您需要注册/取消注册BroadcastReceivers或其他侦听器,则可以安全地使用onstart()onstop()方法,因为它们将始终被调用。

注意:有些碎片容器可以保持不可见的碎片启动。要处理这种情况,可以重写fragment.OnHiddenChanged(boolean hidden)。根据文档,一个片段必须是开始的并且是可见的(不是隐藏的),才能对用户可见。

更新:如果您使用android.support.v4.widget.drawerlayout,则即使在drawer打开时,抽屉下面的一个片段也会保持启动状态并可见。在这种情况下,您需要使用DrawerLayout.setDrawerListener()并侦听OnDrawerClosed()OnDrawerOpened()回调。

 类似资料:
  • 我想了解Android中活动生命周期和片段生命周期之间的相互作用,所以我决定启动一个新项目并从这个页面复制代码 然后我想,为了提高我的理解力,在平板电脑上测试它,改变它的方向,看看它发生了什么(尽管可能不是为了这个目的)。通过logcat,我跟踪在活动和国家/地区片段上触发的主要事件,例如在activity Oncreate中,我写道: 这是我从纵向视图开始,然后旋转时得到的结果: TAG:活动:

  • 我有一段代码,调用startActivityForResult()从Android gallery中挑选图像。在调用startActivityForResult()和激活onActivityResult()时,我很难理解片段的生命周期。 “我的活动”检索信息并将其加载到listview。然后,它允许用户通过使用startActivityForResult()向照相机/多媒体资料应用程序发送意图,将

  • 每当一个片段显示给用户时,我需要执行一些代码。 通过查看API,我能看到的最接近的钩子方法是onResume。但是,从我的代码调试来看,当用户选择back-button返回到先前显示的片段时,似乎没有调用onResume。 为了澄清我看到的行为: 我有一个“parent”活动,它在ActionBar中配置选项卡...和2个片段F1和F2。 用户选择一个选项卡,F1被加载到活动中。按下按钮,用户就可

  • 我正在开发包含2个片段的应用程序,我想根据需要显示隐藏。下面的代码有一个简单的例子来说明我的问题。这个简单的Fragmentactivity包含一个按钮和一个listfragment。 这个简单的例子完美无瑕。但我不满足于展示隐藏片段。如果删除布局。设置可见性(View.GONE);然后从代码中选择ft.hide(f);不会隐藏碎片。事实上,我们不是在隐藏片段,而是在隐藏容器。 我的问题是,这是一

  • 借用检查器使用显式的生命周期来明确引用的有效时间应该持续多久。在生命周期没有省略[^1]的情况,Rust 需要显式标注来确定引用的生命周期应该是什么样的。对于显式地标注引用的生命周期的语法如下: foo<'a> // `foo` 带有一个生命周期参量 `'a` 和闭包类似,使用生命周期需要泛型。另外这个生命周期的语法也表明了 foo 的生命周期不能超出 'a 的周期。类型的显式标注有 &'a T

  • 片段B 奥纳塔奇 OnCreate 停止-片段不可见。宿主活动已停止,或者片段已从活动中移除,但已添加到后堆栈中。停止的片段仍处于活动状态(系统保留所有状态和成员信息)。但是,它对用户不再可见,如果活动被杀死,它将被杀死。 这是否意味着当在同一活动中添加新片段时,不调用当前片段的方法? 然后在片段B中使用 我所期待的是? 片断A的onStart方法被调用,因为片断A现在可见 案例2 片段A 停顿