android

Android-Jetpack-Navgation的Fragme

2022-04-16  本文已影响0人  阿博聊编程
配图来自网络,如侵必删

在使用Navgation开发单Activity多Fragment的App的时候,Fragment之间的跳转肯定是要处理跳转参数的。这篇博客就围绕Fragment如何传递参数来展开,希望对看文章的小伙伴有所帮助。

Fragment传统传递参数方式

首先来说说传统的Fragment传统传递参数的方式,传递参数的代码如下:

val bundle = Bundle()
bundle.putString("param1","MainFragment")
bundle.putInt("param2",0)
Navigation.findNavController(view).navigate(R.id.action_mainFragment_to_secondFragment,bundle)

接收参数的代码如下:

val bundle = arguments
if (bundle != null){
   val fragmentStr = bundle.getString("param1")
   val fragmentIndex = bundle.getInt("param2")
}

这种传递参数可能是我们的首选,但是我们还有其他的选择,下面分享一种safe args插件传递参数。

使用safe args插件传递参数

安装插件

在项目级别的build.gradle加入下面的语句:

buildscript {
    ...
    dependencies {
        ...
        // Fragment传递参数的插件
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.2"
    }
}

app的build.gradle加入下面的语句:

plugins {
  id 'androidx.navigation.safeargs'
}

如果你项目是纯Kotlin的话,我推荐下面的语句:

plugins {
   id 'androidx.navigation.safeargs.kotlin'
}

在导航视图XML添加参数

这里关键是使用<argument/>标签,代码示例如下:

<!-- 设置传递的参数 -->
<argument android:name="fragment_name"
    app:argType="string" />

<argument android:name="fragment_index"
    app:argType="integer"
    android:defaultValue="0"/>

完成之后需要Make Project,这样会生成xxxArgsxxxDirections类。

代码中传递参数

传递参数:

val bundle = MainFragmentArgs("MainFragment",0).toBundle()
Navigation.findNavController(view).navigate(R.id.action_mainFragment_to_secondFragment,bundle)

接收参数:

val name = MainFragmentArgs.fromBundle(requireArguments()).fragmentName
val index = MainFragmentArgs.fromBundle(requireArguments()).fragmentIndex

使用safe args插件的好处

safe args插件可以生成简单的objectbuilder类,方便我们以类型安全的方式浏览和访问任何关联的参数。

上一篇下一篇

猜你喜欢

热点阅读