通过调用 popBackStackImmediate 返回到 tablayout 中的替换片段时调用哪个方法

Posted

技术标签:

【中文标题】通过调用 popBackStackImmediate 返回到 tablayout 中的替换片段时调用哪个方法【英文标题】:Which method is called when returning to a replaced fragment in a tablayout via calling popBackStackImmediate 【发布时间】:2021-01-21 14:29:01 【问题描述】:

好的,我发现我正在打开/替换另一个布局元素中的片段,而不是 tablayout 所在的那个。因此,如果我理解正确并且没有触发生命周期方法,则底层片段永远不会真正离开。

我在 TabLayout 中有 FragmentA,我从中调用:

//inside FragmentA
@Override
public void onClickView() 
    activity.replaceFragment(FragmentB.newInstance(), true);

在replaceFragment中将传入的fragment添加到事务中的backstack中,然后替换fragment

public void replaceFragment(Fragment fragment, boolean doAddToBackStack) 
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    if (doAddToBackStack) 
        String tag = fragment.getClass().toString();
        ft.addToBackStack(tag);
    

    ft.replace(R.id.mainFragment, fragment);
    ft.commit();

之后,FragmentB 打开,我做我的事情并通过 popBackStackImmediate() 返回到 FragmentA:

//inside FragmentB
@Override
public void onClickBack() 
    activity.getSupportFragmentManager().popBackStackImmediate();

当我回去时,我需要更新 FragmentA 中的一些内容。

根据平台上的another post,返回片段时应该调用 onCreateView() ,但这对我不起作用。根据fragment lifecycle documentation,仅在第一次绘制 UI 时才调用 onCreateView(),这可以解释我的麻烦。

我现在的问题是我可以使用什么生命周期方法,或者当从后台堆栈返回片段时我应该采取什么其他方法来执行代码?

【问题讨论】:

您的replaceFragment 代码实际上是做什么的? @ianhanniballake 我用 replaceFragment 信息更新了帖子 【参考方案1】:

根据以下答案,您可以添加一个侦听器来检查它何时被调用 https://***.com/a/52646588/6468214

getSupportFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() 
                public void onBackStackChanged() 

                       // Your Code Here

                
            );

【讨论】:

以上是关于通过调用 popBackStackImmediate 返回到 tablayout 中的替换片段时调用哪个方法的主要内容,如果未能解决你的问题,请参考以下文章

通过反射调用动态调用方法

如何通过 DBLINK 通过 DBLINK 调用 SELECT?

静态方法只能通过类名调用吗?

通过self调用propery和直接调用propery的区别

Apache Camel - 调用 http 或 rest 调用(通过 Shiro Security 过滤)

Apache Camel - 调用 http 或 rest 调用(通过 Shiro Security 过滤)