当前位置:网站首页>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间传值-接收
传递:
接收:
边栏推荐
- sklearn 分类器常见问题
- [jzoof] 13 plage de mouvement du robot
- Major optimization of openim - Message loading on demand, consistent cache, uniapp Publishing
- Digital signal processing experiment (I)
- 我的创作纪念日
- How to become a modeler? Which is more popular, industrial modeling or game modeling?
- 零基础要学建模该从何开始?如何才能学好游戏建模?
- 世界上最大的开源基金会 Apache 是如何运作的?
- 知乎二面:请问Redis 如何实现库存扣减操作和防止被超卖?
- Build a PHP development environment (apache+php+mysql) "suggestions collection"
猜你喜欢
![[toggle 30 days of ML] Diabetes genetic risk detection challenge (2)](/img/39/d0134a8493877beaa6b6850c045f2b.png)
[toggle 30 days of ML] Diabetes genetic risk detection challenge (2)

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

错误“ Failed to fetch “xxx”Temporary failure resolvingW: Some index files failed to download“解决办法

Deep learning learning record - update of learning rate of optimizer

【攻防世界WEB】难度三星9分入门题(终):fakebook、favorite_number

建模刚开始学习很迷茫,次世代角色建模该怎么学习?

【Coggle 30 Days of ML】糖尿病遗传风险检测挑战赛(2)

世界上最大的开源基金会 Apache 是如何运作的?

建模刚学习很迷茫,次世代角色建模流程具体该怎么学习?
![[jzof] 13 motion range of robot](/img/c3/56ae78f19578ff8ad8d9b824b7d99f.png)
[jzof] 13 motion range of robot
随机推荐
【游戏建模模型制作全流程】用ZBrush制作游戏士兵角色
从业务开发中学习和理解架构设计
Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
Three things programmers want to do most | comics
【游戏建模模型制作技巧分享】ZBrush如何调整笔刷大小
错误“ Failed to fetch “xxx”Temporary failure resolvingW: Some index files failed to download“解决办法
接口测试概述
Shell | incomplete summary of the method of viewing the process
Rhcsa Notes 6
MySQL classic exercises and answers, 50 common SQL sentence exercises
rhcsa笔记四
[toggle 30 days of ML] Diabetes genetic risk detection challenge (2)
元胞数组处理
The great heat of the twenty-four solar terms
【3D建模制作技巧分享】Zbrush如何将图片转浮雕模型
零基础要学建模该从何开始?如何才能学好游戏建模?
Rhcsa notes 5
DDD:如何领用领域驱动设计来避免写流水账代码
80+嘉宾登台,10余国用户参会,7万+观众收看,「GWEI 2022-新加坡」落幕
次世代行业现状如何?90%转行建模师都在学习这套流程