ARouter路由框架告别老套的Intent,Bundle页面跳转

引言:

  提到android开发中的页面跳转和数据传递,你会想到什么?Intent?还是Bundle?你还在为到底传递的数据接收方是activity还是fragment而纠结使用何种跳转方式吗?其实大可不必!一个ARouter路由跳转将它们一视同仁、统统搞定,你只需要一种方式就可以快乐开发页面跳转,告别传统老套的Intent。


介绍

  一句话:帮助 Android App 进行组件化改造的路由框架。

  那么,什么是路由框架呢?其实就是根据路径跳转的框架。通俗来讲,就是给每一个Activity或者Fragment自定义一个路径,当每次点击事件触发时,让路由根据这个路径去跳转,同时传递你想要传的数据过去。


用法

第一步:添加依赖和配置(app下的build gradle)。
//ARouter路由跳转
    implementation 'com.alibaba:arouter-api:1.3.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
    // kapt 'com.alibaba:arouter-compiler:1.1.4'   //Kotlin语言,需要改关键字
defaultConfig {
        //ARouter路由跳转
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName :project.getName() ]
            }
        }
    }
第二步:新建一个ARouterManager类。
作用:统一管理各个界面路由跳转的路径值。
/**
 * @data on 2020/9/9 12:18 PM
 * @auther  ArmStrong
 * @describe  路由跳转框架管理
 */
public class ARouterManager {
    public static class Path {
        public static final String ARouter_B = "/ArmStrong/hello_ARouter";

    }

    /**
     * 初始化路由框架
     * @param application
     */
    public static void initRouter(Application application) {
        if (BuildConfig.DEBUG) {
            // 开启调试模式,此为必须项,否则ARouter将无法进行跳转
            ARouter.openDebug();
           // 打印日志
            ARouter.openLog();
        }
        ARouter.init(application);
    }
}
第三步:在ActivityA(传递数据方),进行页面跳转和传入参数。
public class Case17 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_case17);
        //路由初始化调用,传入参数为Application
        ARouterManager.initRouter(getApplication());
        //跳转界面+传递数据
//        ARouter.getInstance().build(ARouterManager.Path.ARouter_B).navigation(); //不带数据
        ARouter.getInstance()
                .build(ARouterManager.Path.ARouter_B)
                .withString("zhangsan","我是张三")
                .withString("lisi","我是李四")
                .navigation();
    }
}
第四步:在ActivityB(接收数据方),跳转完成,接收参数。
@Route(path = "/ArmStrong/hello_ARouter")
public class Case18 extends AppCompatActivity {
    @Autowired(name = "zhangsan")   //获取ARouter传过来值需要使用的注解
    String key1;
    @Autowired(name = "lisi")   //获取ARouter传过来值需要使用的注解
    String key2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_case18);
        ARouter.getInstance().inject(this); //接收数据
        Toast.makeText(this,key1+key2,Toast.LENGTH_SHORT).show(); //Toast展示
    }
}

大功告成!!!

运行效果

ARouter界面跳转.gif

【解析】

(1):原理
  使用ARouter框架就是通过路径找到你需要跳转到的Activity,或者Fragment,然后进行跳转和传参,不再受限于你的数据传递方和接收方是Activity又或者Fragment,它并不关心。
  对比老套的Intent,Bundle来进行Activity之间传值,Activity与Fragment之间传值,Fragment之间传值,当你使用过ARouter路由框架来管理你的页面跳转后,你会发现ARouter将它们一视同仁,页面跳转将如同德芙般尽享丝滑。


(2):路径
  路径(自定义):就像我例子中写的"/ArmStrong/hello_ARoute",来通过自定义的ARouterManager框架管理类,找到你想要跳转到的界面,然后去给他定义路径,再在ActivityA(数据传出方)去使用下面的方式调用进行界面跳转,大功告成!其中url不就是你自定义的ActivityB的路径吗?这并不难理解。

ARouter.getInstance().build(url).navigation()

(3):键值对

  发送方通过这种("key","value")的键值对方式传参数,想必大家并不陌生。

.withString("zhangsan","我是张三")

  接收方通过下面这种注解的方式来接收参数,@Autowired(name = "key"),接收到你传递的key值,并且定义一个String 类型的key1来接收它,其实就是做了一个 String key1 = key 的操作,你就可以使用传递过来的数据了。

@Autowired(name = "zhangsan")
String key1;

千夜零一:“这是我的第一篇博客。今年毕业以来已经两个月了好快,之前总是看各种博客学习东西,现在我想用博客记录下我的学习脚步,好东西也需要分享,索取和给予是相互的。以后会尽量日更的!目标完成1001篇博客哈哈。”
  如果觉得对你有所帮助,请不要吝啬你的点赞,有问题也可以在下方评论区留言哦,关注我一起学习吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。