【发布时间】: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 信息更新了帖子
标签: android android-fragments android-lifecycle