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
方法传递参数,如withString
、withInt
、withParcelable
等 - 使用
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