大概有部门Android开发的小同伴见过单Activity多Fragment的App,使用起来非常的流通大概说非常的丝滑。本身想要实行这种开发模式的时间,又会发现Fragment的管分析比力贫困。如今不消怕了,Android SDK为了我们提供了Navigation来实现这种开发模式。渴望这篇文章对小同伴们有所启发。
Navigation的上风
先来说说使用Navigation的上风:
- 可以可视化页面的导航,可以帮我们快速理清页面之间的关系;
- 通过destination和action完成页面之间的导航;
- 方便我们添加页面的切换动画;
- 页面之间范例安全的参数通报;
- 通过NavigationUI类,对菜单、底部导航、抽屉菜单导航举行同一的管理;
- 支持深层链接DeepLink(深层链接)。
project的Navigation依赖设置
dependencies { def nav_version = "2.4.2" classpath "androidx.navigation:navigation-safe-args-gradle-pluginnav_version"}module的Navigation依赖设置
plugins { id 'androidx.navigation.safeargs'}Java版本:
implementation "androidx.navigation:navigation-fragment:2.4.1"implementation "androidx.navigation:navigation-ui:2.4.1"Kotlin版本:
implementation "androidx.navigation:navigation-fragment-ktx:2.4.1"implementation "androidx.navigation:navigation-ui-ktx:2.4.1"Compose版本:
implementation "androidx.navigation:navigation-compose:2.4.1"Navigation的重要因素
- Navigation Graph,新型的XML资源文件,此中包罗App所有的页面,以及页面之间的关系。
- NavHostFragment,特殊的Fragment,我们可以以为是一个Fragment的容器,Navigation Graph中的Fragment都是通过NavHostFragment举行展示。
- NavController,在代码当中完成Navigation Graph中的页面切换工作。
Navigation代码示例
1.在res创建navigation资源文件夹,在navigation创建nav_graph.xml文件。
2.在activity_main.xml,内容详情如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" androidrientation="vertical" tools:context=".MainActivity"> <fragment android:id="@+id/nav_host_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:name="androidx.navigation.fragment.NavHostFragment" app:navGraph="@navigation/nav_graph" app:defaultNavHost="true"/></LinearLayout>属性阐明如下:
- android:name="androidx.navigation.fragment.NavHostFragment",告诉体系这是一个特殊的Fragment。
- app:defaultNavHost="true",表现Fragment会自动处理体系返回键,当用户做返回操纵的时间会退出当前的Fragment.
- app:navGraph="@navigation/nav_graph",导航视图。
3.在nav_graph.xml创建两个Fragment
<?xml version="1.0" encoding="utf-8"?><navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph" app:startDestination="@id/mainFragment"> <fragment android:id="@+id/mainFragment" android:name="com.yb.test.MainFragment" android:label="fragment_main" tools:layout="@layout/fragment_main"> <action android:id="@+id/action_mainFragment_to_secondFragment" app:destination="@id/secondFragment" /> </fragment> <fragment android:id="@+id/secondFragment" android:name="com.yb.test.SecondFragment" android:label="fragment_second" tools:layout="@layout/fragment_second" /></navigation>4.NavControIIer实现导航功能
我们在MainFragment中创建按钮,设置按钮的点击变乱:
view.findViewById<Button>(R.id.btn).setOnClickListener { Navigation.findNavController(it).navigate(R.id.action_mainFragment_to_secondFragment)}大概的实现就是如许子,感兴趣的小同伴可以实行一下。 |