通过调用 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的区别