当前位置:网站首页>Navigation component of jetpack compose uses
Navigation component of jetpack compose uses
2022-07-23 18:45:00 【my_ worldlet】
Import dependence
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'
Create several as needed Fragment And Fragment The corresponding layout file
<?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)
}
}
Create a navigation diagram
1. establish Navigation Catalog
res Right click the resource directory to create a new directory 

2. establish xml file , For storage fragment Routing relationship between


3. To write nav_login.xml Code for :
<?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. The final structure is as follows :

Label attribute description

establish activity Containers
Method 1 xml Use the default know to load the page without transferring parameters
Layout file :
<?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 in :
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()
}
}
Method 2: dynamically modify the default start page
Layout file ( Not set up navGraph attribute ):
<?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 Dynamic settings in setGraph and 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()
}
}
The start page fragment Click to jump to another fragment Key code

Attribute specification
| attribute | explain |
|---|---|
| app:defaultNavHost=“true” | Indicates the return button event of the interception system |
| app:navGraph=“@navigation/nav_login” | NavHostFragment The associated navigation map is nav_login.xml |
effect :
Pass value
activity,fragment Indirect transmission value - receive
activity In the transfer :
fragment In the receiving :
Be careful :Activity The ginseng , Every Fragment All available
fragment Indirect transmission value - receive
Pass on :
receive :
边栏推荐
- 【2020】【论文笔记】基于Rydberg原子的——
- 【2018】【论文笔记】石墨烯场效应管及【2】——石墨烯的制备、转移
- 怎么将word中的times new roman的双引号替换成宋体双引号
- 一文了解 NebulaGraph 上的 Spark 项目
- 多线程【全面学习 图文精讲】
- ?前台传参的问题待确认
- Have a safe summer vacation, no holidays! Please keep these summer safety tips
- [sharing game modeling model making skills] how ZBrush adjusts the brush size
- Tampermonkey究竟有什么用?
- 【2013】【论文笔记】太赫兹波段纳米颗粒表面增强拉曼——
猜你喜欢

Can self-study 3D modeling succeed? Can self-study lead to employment?

怎么将word中的times new roman的双引号替换成宋体双引号
![MySQL [knowing and mastering one article is enough]](/img/5a/ed8f1d3fac63d329a28ebf6d4974f5.png)
MySQL [knowing and mastering one article is enough]

Jetty 服务器的 NIO 机制是如何导致堆外内存溢出的

【2013】【论文笔记】太赫兹波段纳米颗粒表面增强拉曼——

Spark 安装与启动

ROS (27): the simple use of rosparam and the unsuccessful transfer of parameters through launch and its solution

BOM introduction of BOM series

【游戏建模模型制作全流程】用ZBrush制作游戏士兵角色

多线程【全面学习 图文精讲】
随机推荐
Three things programmers want to do most | comics
《通信软件开发与应用》课程结业报告
Deepstream learning notes (II): description of GStreamer and deepstream-test1
代码整洁,高效的系统方法
Multithreading [comprehensive study of graphics and text]
自学3D建模能不能成功?自学能就业吗?
错误“ Failed to fetch “xxx”Temporary failure resolvingW: Some index files failed to download“解决办法
UAV circumnavigating an unknown target under a GPS-deniedenvironment with range-only measurements翻译
Behind the recovery of the B-END Market: who stands in front of the stage?
Interface test overview
PCL:多直线拟合(RANSAC)
LeetCode 剑指 Offer II 115.重建序列:图解 - 拓扑排序
My creation anniversary
ROS (27): the simple use of rosparam and the unsuccessful transfer of parameters through launch and its solution
SQLZOO——SELECT from Nobel Tutorial
Gradle【图文安装及使用演示 精讲】
Foundation of class
1259. 不相交的握手 動態規劃
程序员最想干的三件事 |漫画
【2013】【论文笔记】太赫兹波段纳米颗粒表面增强拉曼——