因为 google 的 navigation 使用 FragmenManager.replace()
来切换 fragment 导致上一个 fragment 会销毁,返回时重走 onCreateView
等生命周期,用户体验极差。
- 使用
add/hide fragment
代替replace
,并且在转场动画结束时,对上个页面进行hide
,避免多个Fragment
的过度绘制 - 优化了转场动画,内部使用
IdeHandler
自定义实现了fragment
的转场动画。 - 内部使用
setMaxLifecycle
对hide
状态的 Fragment 重置生命周期为onPause
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
// 将谷歌原生的 "androidx.navigation:navigation-fragment:navigation" 注释掉换成下面的依赖
implementation 'com.github.lwj1994:navigation-keep-state-fragment:${latestVersion}'
// 如果依赖了 navigation-fragment-ktx 使用的时候需要把谷歌的 `androidx.navigation.fragment` 包名的代码剔除。
implementation("androidx.navigation:navigation-fragment-ktx:${Versions.navigation}"){
exclude group: 'androidx.navigation'
}