在之前的笔记中,一直没有讲到Fragment间传递参数的问题,大部分时候直接使用
ViewModel
或者构造函数函数就行传参,当然网络上也有部分使用调用Activit
中的方法来进行参数共享的歪道,但显而易见这些方法既不安全也增加了程序的强耦合,因此本编笔记使用了安卓官方提供的方法。
1、初始化导航控制器
NavController controller=Navigation.findNavController(requireView());
2、新建Bundle
对象,并添加相应的参数
Bundle bundle=new Bundle();
bundle.putString("key","this is key");
这里bundle中可以传入多个不同类型的参数,其中每个参数使用一个KEY来标明
3、发送参数
在进行页面动作时,将之前的bundle放入其中
controller.navigate(ldResActivity,bundle);
注意在不使用ldRes的情况下可以直接使用Fragment.setArguments()
方法发送参数
4、接收参数
在跳转的页面使用getArguments()
方法可以获取传入的Bundle对象,在使用之前的KEY取回参数即可
Bundle bundle=getArguments();
String str=bundle.getString("Key");
此时即可将之前的this is key赋值给str
需要注意的是,此方法需要判空,避免出现空指针错误,此时可以添加参数defaultValue
String str=bundle.getString("Key","null");
进行默认赋值,即当没有该参数时候默认使用后者赋值