google官方fragment页面框架navigation和xpage开源框架的使用对比(代码片段)

xuexiangjys xuexiangjys     2022-12-10     594

关键词:

视频介绍

https://www.bilibili.com/vide...

简介

  • Navigation简介

AndroidJetpack组件。Google官方对它的描述:

今天,我们宣布推出Navigation组件,作为构建您的应用内界面的框架,重点是让单 Activity 应用成为首选架构。利用Navigation组件对 Fragment 的原生支持,您可以获得架构组件的所有好处(例如生命周期和 ViewModel),同时让此组件为您处理 FragmentTransaction 的复杂性。此外,Navigation组件还可以让您声明我们为您处理的转场。它可以自动构建正确的“向上”和“返回”行为,包含对深层链接的完整支持,并提供了帮助程序,用于将导航关联到合适的 UI 小部件,例如抽屉式导航栏和底部导航。
  • XPage简介

一个非常方便的fragment页面框架,X-Library系列重要组件。设计的初衷是希望能做一个通用的Activity作为壳,Fragment作为页面填充展示,并且能够实现自由的切换和数据交互, 点击了解XPage更多内容.


特性对比

对比特性NavigationXPage
注册方式XML注册json或者@Page注册
参数传递动态/静态都支持动态/静态都支持
页面切换动画动态支持动态/静态都支持
容器占位数支持多个占位仅支持一个占位
便捷性每次都需要编写navigation导航无需重复性代码,一个@Page注解搞定
功能性强大,支持多种使用方式强大,提供多种常用组件和API
拓展性优秀,方便拓展因为追求便捷性,因此牺牲了部分拓展性
目标去除Activity去除Activity
生态AndroidJetpack全家桶,Google官方出品生态相对薄弱,但是也有X-Library系列支持

通过上面表格的对比可以看出,这两个框架各有特色。

  • Navigation侧重拓展性,适合中大型项目,方便项目的维护和拓展。
  • XPage侧重便捷性,适合中小型项目,快速开发,尤其适合新手、学生党和自由开发等独立开发者。

使用对比

以下我仅从集成和页面跳转两个方面进行简单的使用比较,更多使用内容可以参阅本项目源码。项目地址: https://github.com/xuexiangjys/Navigation_XPage

集成

  • Navigation

由于是Google出品,所有非常方便,只需要你创建项目(New Project)的时候,选择"Basic Activity"的选项,工程会自动帮你增加Navigation的依赖。如下图:

如果你不想创建新的项目,也很简单,只需要在项目中增加如下依赖:

dependencies 
    ...
    implementation \'androidx.navigation:navigation-fragment:2.3.0\'
    implementation \'androidx.navigation:navigation-ui:2.3.0\'
  • XPage

XPage的集成相对比较麻烦,不过相对也提供了一个模版工程,直接集成了XPage,拿到手就可以用了。

  • 简化版的Android空壳模版工程
  • Android空壳模版工程

如果你想集成到自己的项目中,可以参考XPage集成指南。

页面跳转

页面跳转的话,XPage就相对简单多了。
  • Navigation

1.在res/navigation/中创建navigation导航图。

2.在Activity的布局中增加Fragment占位容器。下面是使用NavHostFragment进行占位。

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

3.使用NavController进行页面导航。

NavHostFragment.findNavController(FirstFragment.this)
        .navigate(R.id.action_FirstFragment_to_SecondFragment);
  • XPage

1.随便创建一个类并继承XPageFragment,然后在类上使用@Page进行注解

@Page
public class TestFragment extends XPageFragment 

...

2.然后在任意继承了XPageActivity或者XPageFragment类中使用openPage即可。

// 使用类名打开
openPage(TestFragment.class);
// 使用页面标识符打开
openPage("TestFragment");

更多使用对比

更多使用内容可以参阅本项目源码, 项目地址: https://github.com/xuexiangjys/Navigation_XPage .

微信公众号

更多资讯内容,欢迎扫描关注我的个人微信公众号!

jetpacknavigation(代码片段)

...以,这里用我自己的话来总结一下,我们在处理Fragment是需要通过写Fragment的事务去操作Fragment的,而Navigation的出现是为了解决我们之前开发的一些痛点。Navigation主要用于实现Fragment代替Activity的页面导航功能,让F... 查看详情

navigation—这么好用的导航框架你确定不来看看?(代码片段)

...以,这里用我自己的话来总结一下,我们在处理Fragment是需要通过写Fragment的事务去操作Fragment的,而Navigation的出现是为了解决我们之前开发的一些痛点。Navigation主要用于实现Fragment代替Activity的页面导航功能,让F... 查看详情

androidjetpack之navigation源码分析(代码片段)

AndroidJetpack之Navigation源码分析AndroidNavigation简介关于Fragment的基础篇:Fragment基础篇官方指导地址:官方指地址Githubdemo地址:demo使用Navigation可以管理APP页面跳转。Navigation不部分情况下作用于Fragment中,使用Navigation... 查看详情

jetpackcompose接收返回参数

...tion组件与Compose配合使用,有以下两种选择:1、使用基于fragment的Navigation组件定义导航图。2、使用Compose目的地在Compose中通过NavHost定义导航图。只有在导航图中的所有屏幕都是可组合项的情况下,才可以这么做。因此,若要构... 查看详情

navigation—这么好用的导航框架你确定不来看看?(代码片段)

...以,这里用我自己的话来总结一下,我们在处理Fragment是需要通过写Fragment的事务去操作Fragment的,而Navigation的出现是为了解决我们之前开发的一 查看详情

「android高级开发」10年老程序员经验谈:navigation入门详解(代码片段)

...  Google在2018年推出了AndroidJetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation.字面意思是导航,但是除了做APP引导页面以外.也可以使用在App主页分tab的情况..甚至可以一个功能模块就一个activity大部分页面UI都使用fra... 查看详情

androidmvvm框架搭建navigation+fragment+bottomnavigationview(代码片段)

AndroidMVVM框架搭建(五)Navigation+Fragment+BottomNavigationView前言正文一、添加依赖二、Fragment创建三、BaseActivity创建四、启动页五、主页面六、Navigation使用七、聚合数据请求①NetworkApi②ApiService③数据库升级④数据存储... 查看详情

androidmvvm框架搭建navigation+fragment+bottomnavigationview(代码片段)

AndroidMVVM框架搭建(五)Navigation+Fragment+BottomNavigationView前言正文一、添加依赖二、Fragment创建三、BaseActivity创建四、启动页五、主页面六、Navigation使用七、聚合数据请求①NetworkApi②ApiService③数据库升级④数据存储... 查看详情

androidjetpack导航组件——navigation的使用(代码片段)

概述Navigation是采用一个Activity和多个Fragment形式设计的Ui架构模式,但是众所周知,Fragment的管理一直是个麻烦事,需要通过FragmentManager和FragmentTransaction来管理Fragment之间的切换。所以Google提供了一套Navigation用来管理Fr... 查看详情

navigation之详细聊聊fragment的实现原理(代码片段)

作者:字节小站1.前言Fragment真是一个非常老的家伙,它的第一条提交记录是在2010年,而最近的一条记录则是在2021年6月11号,足足11岁了,但是它却老当益壮,在Jetpack中大放异彩,Navigation组件就是基于... 查看详情

jetpacknavigation实现自定义view导航(代码片段)

...ent承载页面的实现,所以一提到Navigation首先想到配合Fragment使用。其实Navigation优秀的设计使其支持任意类型的页面跳转,哪怕是一个自定义View。本文就介绍一下Navigation中View的使用。进入正题之前࿰ 查看详情

如何提示从嵌入式地图打开 Google Maps Directions 到 Google Maps Navigator 的页面?

...提示从嵌入式地图打开GoogleMapsDirections到GoogleMapsNavigator的页面?【英文标题】:HowtopromptopeningGoogleMapsDirectionsfromembeddedmapintopageintotheGoogleMapsNavigator?【发布时间】:2018-02-2302:33:12【问题描述】:我已将谷歌地图嵌入到我的页面中... 查看详情

使用Android Navigation Component,如何使actionBar透明并在单个Fragment中使布局全屏?

】使用AndroidNavigationComponent,如何使actionBar透明并在单个Fragment中使布局全屏?【英文标题】:UsingAndroidNavigationComponent,howtomakeactionBartransparentandmakelayoutfullscreeninsingleFragment?【发布时间】:2020-04-2402:37:29【问题描述】:我将Google推... 查看详情

kotlinnavigation开发(代码片段)

...来带大家入门,希望大家不要嫌弃Navigation的优势站在Fragment角度:不用把Fragment添加到集合里面去操作了,也不用去操作SupportFragmentManager了站在Activity角度:可以减少大量的Activity,增加Fragment的使用,毕竟... 查看详情

Android 崩溃 onCreate() - Fragment 无法转换为 androidx.navigation.fragment.NavHostFragment

】Android崩溃onCreate()-Fragment无法转换为androidx.navigation.fragment.NavHostFragment【英文标题】:AndroidcrashonCreate()-Fragmentcannotbecasttoandroidx.navigation.fragment.NavHostFragment【发布时间】:2020-12-2901:17:45【问题描述】:我决定为我的应用执行Fire 查看详情

android日志—navigation(代码片段)

...的导航,该框架提供一致的API,无论目标是作为Fragment、Activity还是其他组件的实现。NavGraph在一个集中位置包含所有导航相关信息的XML资源NavHost显示导航图中目标的空白容器,导航组件包含一个默认NavHost实现(Na... 查看详情

路由框架-arouter(跳转拦截)

...我们在Application里面进行ARouter初始化1)首先:在Activity/Fragment类上面写上Routepath注解。   注意:这里的路径需要注意的是至少需要有两级,/xx/xx2)然后:在Activity/Fragment类里面进入Arouter注入,也就是:ARouter.getInstance(... 查看详情

navigation+bottomnavigationview实现的tab效果重建fragment问题

Navigation+BottomNavigationView实现的tab效果重建fragment问题由于这个控件内部实现会导致fragment频繁重建。因此我们需要对它的listener做一点定制,来处理这个问题valperiodManagerFragment:Fragment=PeriodManagerFragment()valmineFragment:Fragm 查看详情