使用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
相关产品推荐
相关产品推荐

