当前位置:网站首页>Jetpack Compose之Navigation组件使用
Jetpack Compose之Navigation组件使用
2022-07-23 16:27:00 【my_worldlet】
导入依赖
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'androidx.navigation:navigation-runtime-ktx:2.5.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.0'
根据需要创建几个Fragment及Fragment对应的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="register" />
</LinearLayout>
package com.example.wanandroid.ui.fragment
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.example.wanandroid.R
class RegisterFragment: Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_register,container,false)
}
}
创建导航关系图
1.创建Navigation目录
res资源目录右键新建目录

2.创建xml 文件,用来存放fragment 之间的路由关系


3.编写nav_login.xml的代码:
<?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"
android:id="@+id/nav_login"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.example.wanandroid.ui.fragment.LoginFragment"
android:label="LoginFragment">
<action
android:id="@+id/action_loginFragment_to_registerFragment"
app:destination="@id/registerFragment" />
</fragment>
<fragment
android:id="@+id/registerFragment"
android:name="com.example.wanandroid.ui.fragment.RegisterFragment"
android:label="RegisterFragment" />
</navigation>
4.最终结构如下图:

标签属性说明

创建activity容器
方式一之xml使用默认知道加载页面且不传参
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/nav_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_login"/>
</LinearLayout>
activity中:
package com.example.wanandroid.ui
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.example.wanandroid.R
class LoginActivity: BaseCompatActivity() {
lateinit var navController: NavController
override fun getLayoutId(): Int {
return R.layout.activity_login
}
override fun initView(savedInstanceState: Bundle?) {
navController=Navigation.findNavController(this, R.id.nav_fragment)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
}
方式二之动态修改默认起始页
布局文件(不设置navGraph属性):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/nav_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"/>
</LinearLayout>
activity中动态设置setGraph和setStartDestination:
package com.example.wanandroid.ui
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.example.wanandroid.R
class LoginActivity: BaseCompatActivity() {
lateinit var navController: NavController
override fun getLayoutId(): Int {
return R.layout.activity_login
}
override fun initView(savedInstanceState: Bundle?) {
navController=Navigation.findNavController(this, R.id.nav_fragment)
navController.apply {
var mNavGraph=navInflater.inflate(R.navigation.nav_login)
mNavGraph.setStartDestination(when (1) {
1 -> R.id.loginFragment
else -> R.id.registerFragment
})
setGraph(mNavGraph,null)
}
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
}
起始页fragment点击跳转另一个fragment关键代码

属性说明
| 属性 | 说明 |
|---|---|
| app:defaultNavHost=“true” | 表示拦截系统的返回按钮事件 |
| app:navGraph=“@navigation/nav_login” | NavHostFragment关联的导航图为nav_login.xml |
效果:
传值
activity,fragment间传值-接收
activity中传递:
fragment中接收:
注意:Activity 传参,每个 Fragment 都可获取
fragment间传值-接收
传递:
接收:
边栏推荐
- Tencent tore open the "fig leaf" of China's NFT
- 华为胖瘦AP切换方法
- VS2010一个解决方案下新建多个项目出现的问题和方法
- Modeling at the beginning of learning is very confused, how to learn next generation role modeling?
- Information theory: introduction and information measures
- Shell | incomplete summary of the method of viewing the process
- Crack WiFi password with Kail
- Block encryption mode ECB, CBC, PCBC, CFB, OFB, CTR
- opencv(13):cv2.findContours、cv::findContours简要介绍及opencv各版本cv2.findContours函数说明
- The great heat of the twenty-four solar terms
猜你喜欢

序列化和反序列化

Great God "magic change" airpods, equipped with usb-c interface, 3D printing shell makes maintenance easier
![[jzof] 13 motion range of robot](/img/c3/56ae78f19578ff8ad8d9b824b7d99f.png)
[jzof] 13 motion range of robot

OSI模型第一层:物理层,基石般的存在!
![[sharing 3D modeling and production skills] how ZBrush turns pictures into relief models](/img/fc/c400821c07ea43576a14a30d96183f.png)
[sharing 3D modeling and production skills] how ZBrush turns pictures into relief models

Installation and use of flame graphs

【游戏建模模型制作技巧分享】ZBrush如何调整笔刷大小

【3D建模制作技巧分享】Zbrush如何将图片转浮雕模型

知乎二面:请问Redis 如何实现库存扣减操作和防止被超卖?

rhcsa笔记五
随机推荐
大神“魔改”AirPods,配备USB-C接口,3D打印外壳让维修更容易
DDD: how to use domain driven design to avoid writing journal code
[jzof] 13 motion range of robot
Prevent and control the summer market blowout after adjustment, and evaluate the summer activities of Tujia, muniao and meituan
Deep learning learning record - update of learning rate of optimizer
栈/堆/队列刷题(中)
【2018】【论文笔记】石墨烯场效应管及【2】——石墨烯的制备、转移
20220721 积分环节的时频域分析
ZigBee system development of Internet of things I (Introduction to ZigBee) [easy to understand]
银行业如何实现数字化转型风口全速启航
Is learning next generation modeling a good scene or a good role? Choose the right profession and pay more than half
Problems and methods of creating multiple projects under one solution in VS2010
rhcsa笔记六
【重磅】聚焦券商终端业务,博睿数据发布新一代券商终端核心业务体验可观测平台
Foundation of class
Flutter 运行模式
Detailed explanation of common curl commands and parameters
【JZOF】13機器人的運動範圍
悲观锁和乐观锁
关于分组查询的一道sql题