android中Navigation组件的Fragment间传递参数

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      
}

你可能感兴趣的:(Android,android,navigation,jetpack组件,Fragment间传参)