在使用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
,这样会生成xxxArgs
和xxxDirections
类。
代码中传递参数
传递参数:
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
插件可以生成简单的object
和builder
类,方便我们以类型安全的方式浏览和访问任何关联的参数。
网友评论