android中Navigation组件的Fragment间传递参数
说明
HomeFragment中点击某个按钮,传递参数到RichTextFragment
一、gradle配置
app中build.gradle的配置
plugins {
id 'com.android.application'
id 'kotlin-android'
//为传递参数添加的
id 'androidx.navigation.safeargs.kotlin'
}
项目中的build.gradle的配置
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//为传递参数添加的
def nav_version = "2.3.2"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
二、navigation中nav_home.xml中的配置
HomeFragment的配置:
<fragment
android:id="@+id/navigation_home"
android:name="xxxx.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home">
<argument
android:name="title"
android:defaultValue="标题"
app:argType="string" />
<argument
android:name="scientificPlantingItem"
android:defaultValue="@null"
app:argType="com.ly.nongji.bean.ScientificPlantingItem"
app:nullable="true" />
</fragment>
RichTextFragment的配置:
<fragment
android:id="@+id/richText"
android:name="com.ly.nongji.main.RichTextFragment"
android:label="@string/fragment_rich_text"
tools:layout="@layout/fragment_rich_text" />
二、使用步骤
1.HomeFragment中点击按钮时传递参数
//其中ScientificPlantingItem是实现了Serializable接口的类
val item=adapter.getItem(position) as ScientificPlantingItem
//这里必须传两个参数,与nav_home.xml中的配置一致
val action = HomeFragmentArgs(item.title,item).toBundle()
getController().navigate(R.id.richText, action)
2.RichTextFragment中接收参数
val mHomeFragmentArgs=HomeFragmentArgs.fromBundle(requireArguments())
if(mHomeFragmentArgs!=null){
//获取ScientificPlantingItem实体类
mScientificPlantingItem=mHomeFragmentArgs!!.scientificPlantingItem
//获取字符串
title=mHomeFragmentArgs!!.title
}