Navigation in Android (二)——Action¶meter
Opened this issue · 0 comments
soapgu commented
-
引言
上一篇我介绍了Navigation的入门。
这一篇我们专门解决导航的跳转问题,怎么跳转,怎么传参数
-
Action
上一篇我们知道destination,就是导航中的一个个点。
那么怎么把destinations一个个关联起来就是路径,就是action
action的id可以通过Resource关联
-
基于id导航
上一篇我们提到可以通过目的地的id来导航
那当然也通过action的id来导航
Navigation.findNavController(view).navigate(R.id.viewTransactionsAction);
-
为目的地增加参数
我们知道,没有参数的“死路径”是不具备高度动态性的,参数是一定要加的。
- 首先我们在ide中选中目的地
- 查看在 Attributes 面板中“Arguments”
- 点击+,输入name和type
-
传递参数
好了参数定义好了,要怎么传怎么收那?
-
使用 Bundle 对象在目的地之间传递参数
虽然有“丐版”传递参数的办法,但是为毛我还要再重新自己写一下参数的封装和拆分啊。我在导航图里面的定义一定都没用到。显然导航图里面的参数用意不是这么用的。 -
使用 Safe Args 传递安全的数据
这已经是标配选项,如果要用参数传递就并不是一个可选项,不选虽然不至于不能用但是不方便
build.gradle增加classpath
buildscript {
repositories {
google()
}
dependencies {
def nav_version = "2.4.1"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
}
在app的build.gradle的plugin里面增加
id 'androidx.navigation.safeargs'
导航跳转入口
binding.btnSpace.setOnClickListener(v -> {
HomeFragmentDirections.ActionHomeFragmentToSpaceFragment action = HomeFragmentDirections.actionHomeFragmentToSpaceFragment("Hello Arg from Home");
Navigation.findNavController(v).navigate(action);
});
这里HomeFragmentDirections是自动生成的代码,我只需正确调用api就行。基本上一看就懂
目的地参数接收
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
textView = view.findViewById(R.id.space_tv);
textView.setText( "Space arg:" + SpaceFragmentArgs.fromBundle(getArguments()).getSoapTest() );
}
-
参考链接
- 在目的地之间传递数据
相关Demo练习repository