You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MaterialContainerTransform时FragmentB的onResume()未调用问题

问题分析与解决方案

这确实是你使用的com.google.android.material:material:1.3.0-alpha03版本里的一个已知Bug——MaterialContainerTransform共享元素过渡会干扰Fragment的生命周期流转,导致onResume()无法正常触发。

为什么会出现这个问题?

在这个早期的alpha版本中,MaterialContainerTransform的过渡逻辑没有正确与Fragment的生命周期回调机制对齐,当设置了该过渡动画后,Fragment的生命周期会卡在某个阶段,跳过了onResume()的调用。

解决办法

1. 优先升级Material Components库版本

这个Bug在后续的稳定版本中已经被修复,建议你直接将依赖升级到1.4.0及以上的稳定版,比如:

implementation 'com.google.android.material:material:1.4.0'

升级后不需要修改现有代码,onResume()就能正常触发,同时还能获得更多功能修复和性能优化。

2. 临时兼容方案(如果暂时无法升级)

如果因为项目限制不能马上升级库版本,可以在FragmentB中监听过渡动画的结束事件,手动执行原本在onResume()中的逻辑:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Transition enterTransition = getEnterTransition();
    if (enterTransition != null) {
        enterTransition.addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {}

            @Override
            public void onTransitionEnd(Transition transition) {
                // 执行原本在onResume()中的业务逻辑
                performOnResumeTasks();
                // 记得移除监听,避免内存泄漏
                transition.removeListener(this);
            }

            @Override
            public void onTransitionCancel(Transition transition) {
                transition.removeListener(this);
            }

            @Override
            public void onTransitionPause(Transition transition) {}

            @Override
            public void onTransitionResume(Transition transition) {}
        });
    }
}

private void performOnResumeTasks() {
    // 这里写你原本在onResume()里的代码
}

内容的提问来源于stack exchange,提问作者Ricky Mo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:02:50