2. Navigation大家都以为的缺陷 起初我用Navigation的时候,最头疼的是当按下返回键回到上个页面的时候整个页面被重建了,这是开发中不想要的结果,很多时候大家都会去寻求一种方式:将官方的replace方式替换为Hide和Show。起初也是想到这个方式,然后结合在网上得到的资料自己写了一个方式FragmentNavigatorHideShow。 3. 然而...
1、Jetpack组件Navigation介绍 2、Jetpack组件Navigation基本使用 3、Jetpack组件Navigation页面跳转 4、Jetpack组件Navigation跳转到其他的Activity 5、Jetpack组件Navigation切换Fragment的动画 6、全局Activity切换动画配置 7、Jetpack组件Navigation跳转与回退 8、Jetpack组件Navigation-popUpTo和popUpToInclusive 9、Android界面切换...
对于Fragment:不用去操作supportFragmentManager,也就意味着对replace、show、hide说拜拜了。 对于Activity:可能会大幅减少Activity,减少使用startActivity因为fragment有更详细的生命周期,更方便的传参。 使用deepLink深链跳转更加方便。 三个关键组成部分 Navigation graph 一个xml资源文件,文件目录为res/navigation/*.xml,...
1、Jetpack组件Navigation介绍 03:14 2、Jetpack组件Navigation基本使用 13:33 3、Jetpack组件Navigation页面跳转 05:22 4、Jetpack组件Navigation跳转到其他的Activity 05:05 5、Jetpack组件Navigation切换Fragment的动画 07:49 6、全局Activity切换动画配置 08:11 7、Jetpack组件Navigation跳转与回退 07:20 8、Jetpack组件...
app:navGraph="@navigation/nav_graph_main" /> name为固定写法,必须指明为 androidx.navigation.fragment.NavHostFragment defaultNavHost字段表示是否拦截返回按键操作。 若为true,需要的Activity中重写onSupportNavigateUp方法。 因为默认情况下返回键是不会回退fragment页面的。
总体来说Navigation的使用并不复杂,它让我们单Activity架构成为可能,无需关心具体的fragment的跳转逻辑。但是同样也是有问题的,通过源码分析我们知道 在NavHostFragment的onCreateView中是创建了FrameLayout,也就是说其实真正的容器是FrameLayout。在创建FragmentNavigator...
app:navGraph="@navigation/nav_graph_main" /> name为固定写法,必须指明为 androidx.navigation.fragment.NavHostFragment defaultNavHost字段表示是否拦截返回按键操作。 若为true,需要的Activity中重写onSupportNavigateUp方法。 因为默认情况下返回键是不会回退fragment页面的。
在使用Navigation的过程中,会出现点击back按键,界面会重新走了onCreate生命周期,并且将页面重构。例如Navigation与BottomNavigationView结合时,点击tab,Fragment会重新创建。目前比较好的解决方法是自定义FragmentNavigator,将内部replace替换为show/hide。 另外,官方对于与BottomNavigationView结合时的情况也提供了一种解决方案。
Destinationnavigate(){// ft.replace(mContainerId, frag);//fix 2: replace换成show和hideList<Fragment>fragments=mFragmentManager.getFragments();for(Fragmentfragment:fragments){ft.hide(fragment);}if(!frag.isAdded()){ft.add(mContainerId,frag,className);}ft.show(frag);ft.setPrimaryNavigation...
1. 在初始化fragment的代码中,改变为复用逻辑。2. 替换`ft.replace`操作为`show`和`hide`,以实现Fragment的切换。3. 通过反射获取父类的`mBackStack`属性。4. 复制父类的`generateBackStackName`方法,以管理复用状态。5. 为`FixFragmentNavigator`添加注解,以便于识别与命名。完成上述步骤后,即可...