Android ARouter 跳转带参数

引言

在开发 Android 应用程序时,经常需要进行页面之间的跳转,并且有时候我们需要在跳转的同时传递一些参数。ARouter 是一个 Android 路由库,它提供了方便的路由跳转功能,并支持传递参数。本文将介绍如何在 ARouter 中进行带参数的页面跳转,并给出相应的代码示例。

ARouter 简介

ARouter 是阿里巴巴开源的一个 Android 路由库。它提供了一种简单、高效的方式来进行页面跳转,并且支持传递参数和拦截器等功能。ARouter 使用了注解的方式来配置路由表,通过注解处理器生成路由表的映射关系,从而实现路由跳转。

ARouter 的主要特点包括:

  • 支持 URI、URL、Intent 等多种跳转方式
  • 支持直接传递参数,支持自动注入参数
  • 支持页面拦截器
  • 支持模块化开发,支持组件化开发
  • 支持跨模块跳转

ARouter 跳转带参数

在 ARouter 中,跳转带参数可以通过注解 @Autowired 来实现。@Autowired 注解用于标记需要传递的参数,ARouter 在跳转页面时会自动将参数注入到目标页面中。

下面是一个示例代码,演示了如何在 ARouter 中进行带参数的页面跳转:

// 页面 A
public class AActivity extends AppCompatActivity {
    @Autowired
    String name; // 需要传递的参数
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);
        ARouter.getInstance().inject(this); // 注入参数
        // TODO: 页面逻辑
    }
    
    // 跳转到页面 B
    public void gotoB() {
        ARouter.getInstance().build("/b/activity")
            .withString("name", name) // 传递参数
            .navigation(this);
    }
}

// 页面 B
public class BActivity extends AppCompatActivity {
    @Autowired
    String name; // 接收参数
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        ARouter.getInstance().inject(this); // 注入参数
        // TODO: 页面逻辑
    }
}

在上面的示例代码中,页面 A 需要在跳转到页面 B 时传递一个名为 name 的参数。首先,在页面 A 中使用 @Autowired 注解标记需要传递的参数 name,然后在页面 A 跳转到页面 B 时,使用 withString 方法将参数传递给 ARouter,最后调用 navigation 方法进行跳转。

在页面 B 中,我们同样需要使用 @Autowired 注解标记接收参数的字段 name,并在 onCreate 方法中调用 ARouter.getInstance().inject(this) 来注入参数。

ARouter 参数传递方式

ARouter 支持多种方式传递参数:

  • 使用 withXxx 方法传递参数,如 withStringwithIntwithParcelable
  • 使用 withObject 方法传递任意类型的参数
  • 使用 withBundle 方法传递 Bundle 类型的参数
  • 使用 withTransition 方法传递 Activity 转场动画参数
  • 使用 withFlags 方法传递 Intent 的 Flags 参数

下面是几种常用的参数传递方式的示例代码:

1. 使用 withString 方法传递参数

ARouter.getInstance().build("/b/activity")
    .withString("name", name) // 传递参数 name
    .navigation(this);

2. 使用 withObject 方法传递参数

ARouter.getInstance().build("/b/activity")
    .withObject("user", user) // 传递参数 user
    .navigation(this);

3. 使用 withBundle 方法传递参数

Bundle bundle = new Bundle();
bundle.putString("name", name); // 传递参数 name
bundle.putInt("age", age); // 传递参数 age

ARouter.getInstance().build("/b/activity")
    .withBundle("data