美文网首页android
Android-Jetpack-Navgation的Fragme

Android-Jetpack-Navgation的Fragme

作者: 阿博聊编程 | 来源:发表于2022-04-16 20:34 被阅读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类,方便我们以类型安全的方式浏览和访问任何关联的参数。

    相关文章

      网友评论

        本文标题:Android-Jetpack-Navgation的Fragme

        本文链接:https://www.haomeiwen.com/subject/tcwhertx.html