1.Navigation源码解析及自定义FragmentNavigator详解
2.手写一个简单的谷歌谷歌谷歌浏览器拓展插件(附github源码)
Navigation源码解析及自定义FragmentNavigator详解
谷歌推出的Navigation主要目标是统一应用内页面跳转行为。使用方法简单,源码源码新项目选择Bottom Navigation Activity,解释解释系统自动生成页面逻辑。谷歌谷歌
Navigation源码设计简洁,源码源码包含多个关键类。解释解释kodi盒子输出源码其中,谷歌谷歌NavHostFragment是源码源码直接在XML文件中定义的,其生命周期方法onCreate中直接创建了NavHostController,解释解释并通过findNavController暴露给外部调用者。谷歌谷歌NavHostController继承自NavController。源码源码在此过程中,解释解释通过navController获取NavigatorProvider并添加了两个Navigator:DialogFragmentNavigator和FragmentNavigator。谷歌谷歌NavController构造方法中还额外添加了两个Navigator,源码源码分别对应DialogFragment、解释解释Fragment和Activity的页面跳转。NavGraphNavigator用于在XML配置的godofhacker源码navGraph与根节点文件中的startDestination之间实现跳转,功能单一。
各个Navigator通过重写navigate方法实现各自的跳转逻辑。FragmentNavigator的关键实现在于注释1处,使用replace加载Fragment,这不符合实际开发需求。文章后续将解释如何自定义FragmentNavigator以避免Fragment在切换时执行生命周期。
NavigatorProvider内部维护了一个HashMap存储相关Navigator信息,通过获取Navigator的scratchyouxi源码注解Name作为键和getClass作为值进行存储。在onCreate方法中,mNavController调用了setGraph,解析XML配置的mobile_navigation节点信息文件,根据不同的节点各自解析。通过获取NavInflater进行解析,返回NavGraph,NavGraph继承自NavDestination,保存了所有解析出的casc源码节点信息。
总结,通过NavHostFragment获取到NavContorl并存储了相关Navigator信息。通过各自navigate方法进行页面跳转,通过setGraph解析配置的页面节点信息并封装为NavGraph对象。其中,通过SparseArray存储Destination信息。
自定义Navigator实现思路主要在于继承现有FragmentNavigator并重写其navigate方法,将replace方法替换为show和hide方法,vbwpe源码完成Fragment切换。通过@Navigator.Name(value)注解标记自定义类为Navigator,加入NavigatorProvider中即可识别。自定义Navigator核心代码实现后,需调整mobile_navigation节点中的fragment为fixFragment,并删除布局文件中NavHostFragment节点信息,手动关联FixFragmentNavigator与NavControl,完成Fragment切换时生命周期不会重新执行。
手写一个简单的谷歌浏览器拓展插件(附github源码)
手写谷歌浏览器插件教程:简易实现与代码详解
首先,让我们通过一个直观的示例来启动创建过程。点击浏览器地址栏输入 chrome://extensions/,即可直接访问扩展程序管理界面。 核心配置文件是 manifest.json,这个文件记录了插件的基本信息,如名称、描述、权限等,是插件身份的身份证。 当插件被激活时,用户会看到一个弹出层,这是通过编写 popup.html 来实现的,它包含了一个简单的HTML界面,用于交互或显示信息。 为了保持代码的清晰,我们把相关的脚本逻辑分离到单独的 popup.js 文件中,这样也支持使用 script 标签直接嵌入。在该文件中,我们将实现插件的核心功能。 此外,我们还需要一个辅助文件 inject.js,它的任务是将特定的代码注入到目标网页,实现所需功能,如上图所示。 整个项目的目录结构清晰可见,便于管理和维护。但这里只是基础部分,更多功能的实现和优化将在后续篇章中详细介绍。