在 Popbackstack() 上调用方法
Posted
技术标签:
【中文标题】在 Popbackstack() 上调用方法【英文标题】:Call a method on Popbackstack() 【发布时间】:2021-11-02 09:17:07 【问题描述】:我用 Fragment-B 替换 Fragment-A,在 Fragment-B 中调用 popbackstack() 时,我将重定向回 Fragment-A。所以我想调用一个方法来更新列表。
【问题讨论】:
【参考方案1】:add 和 replace 的另一个重要区别是:replace 删除现有片段并添加新片段。这意味着当您按下返回按钮时,将创建被替换的片段并调用其 onCreateView。而 add 保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态并且它们不会处于“暂停”状态,因此当按下后退按钮时不会为现有片段调用 onCreateView(在新片段之前存在的片段添加了片段)。对于fragment的生命周期事件onPause、onResume、onCreateView等生命周期事件,replace时会被调用,add时不会被调用。
简而言之,您需要使用 add ,如果您不希望片段视图重叠,则可以将片段 B 视图背景颜色替换为纯色而不是透明。
当您添加片段时,您还必须将其添加到片段的后台堆栈中。
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(这里 R.id.content 是您活动中的片段容器)
然后您必须在包含您的片段的活动中覆盖 onBackPressed 方法。
@Override
public void onBackPressed()
if (getSupportFragmentManager().getBackStackEntryCount() > 1)
getSupportFragmentManager().popBackStack();
如果您想自定义您的 onBackPressed,那么您可以检查您的活动中当前可见的片段,并创建一个回调来执行该特定片段的操作。示例 -
@Override
public void onBackPressed()
if (getSupportFragmentManager().getBackStackEntryCount() > 1)
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (fragment instanceof FragmentB)
((FragmentB) fragment).onBackPressed();
// getSupportFragmentManager().popBackStack();
现在您可以添加 getSupportFragmentManager().popBackStack();在 Fragment 的 onBackPressed() 方法中。
【讨论】:
以上是关于在 Popbackstack() 上调用方法的主要内容,如果未能解决你的问题,请参考以下文章
为啥popbackstack会调用fragment的onCreateView?
在 PopBackStack 之后片段弹出调用 OnViewCreated
popBackStack导致一次又一次调用片段的oncreateView