【问题标题】:onResume fragment method not being called未调用 onResume 片段方法
【发布时间】:2026-01-11 02:05:02
【问题描述】:

我有一个包含 2 个片段的活动 Activity1。一切正常,但我有一个问题:

当我退出当前活动 -Activity1-(不调用 finish ())并转到另一个 Activity2 时,我在最后一个活动上单击返回按钮回到Activity1并执行这个onResume方法

onResumeActivity1 代码:

@Override
protected void onResume () {
    super.onResume ();
    fragmentManager.beginTransaction ().replace (
        R.id.my_frame_container, 
        fragmentFactory.getFragment (Fragment1)
    ).commit ();
}

onResumeFragment1 代码:

@Override
public void onResume () {
    super.onResume ();

    Log.e ("onResume ", " Yes ");
}

来自Documentation : 当activity的onResume方法也被调用时,fragment的onResume方法被调用。

但是在我的情况下,当我回到活动时,片段的 onResume 不会被调用。

您知道如何在调用活动的onResume 时执行片段代码吗?谢谢。

【问题讨论】:

  • 你能把那个片段的代码贴出来吗?
  • @André.C.S :这是一个虚拟代码,请检查我的编辑。
  • 我不确定你在做什么,但是片段的 onResume 方法在显示之前总是被调用。片段工厂实际上是在返回片段吗?
  • 文档并没有说您的片段会在您的活动恢复时恢复。片段有自己的生命周期,请参阅here。不过还是没有回答你的问题..
  • @G.BlakeMeike:是的。所以如果我理解的很好,有没有办法执行fragment right tmalseed的onResume方法?

标签: java android android-fragments


【解决方案1】:

由于Fragment.onResume绑定到了包含activity的Activity.onResume,所以我们在fragment之间切换时不会调用这个方法,所以你需要自己使用OnBackStackChangedListener来调用它,如下所示

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() {
    public void onBackStackChanged() {
        FragmentManager fm = getSupportFragmentManager();
        if (fm != null) {
            int bseCount = fm.getBackStackEntryCount();
            if (bseCount > 0) {
                Fragment fragment = fm.getFragments().get(bseCount - 1);
                fragment.onResume();
            }
        }
    }
});

【讨论】:

    最近更新 更多