Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigation in Android (二)——Action&parameter #122

Open
soapgu opened this issue Mar 17, 2022 · 0 comments
Open

Navigation in Android (二)——Action&parameter #122

soapgu opened this issue Mar 17, 2022 · 0 comments
Labels
Demo Demo 安卓 安卓

Comments

@soapgu
Copy link
Owner

soapgu commented Mar 17, 2022

  • 引言

上一篇我介绍了Navigation的入门。
这一篇我们专门解决导航的跳转问题,怎么跳转,怎么传参数

  • Action

上一篇我们知道destination,就是导航中的一个个点。
那么怎么把destinations一个个关联起来就是路径,就是action

只要通过ide,拖动空心圆就能建立关联
图片

action的id可以通过Resource关联

  • 基于id导航

上一篇我们提到可以通过目的地的id来导航
那当然也通过action的id来导航
Navigation.findNavController(view).navigate(R.id.viewTransactionsAction);

  • 为目的地增加参数

我们知道,没有参数的“死路径”是不具备高度动态性的,参数是一定要加的。

  1. 首先我们在ide中选中目的地
  2. 查看在 Attributes 面板中“Arguments”
  3. 点击+,输入name和type

图片

如图所示 这样到相关目的的action就会默认带相关参数
  • 传递参数

好了参数定义好了,要怎么传怎么收那?

  • 使用 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

@soapgu soapgu added Demo Demo 安卓 安卓 labels Mar 17, 2022
@soapgu soapgu changed the title Navigation in Android (二) Navigation in Android (二)——Action&parameter Mar 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Demo Demo 安卓 安卓
Projects
None yet
Development

No branches or pull requests

1 participant