模仿组件化路由ARouter的原理(二)

本文介绍了手撸一个最简单的ARouter的过程,包括创建ARouter的module和类,实现单例,用HashMap存放Activity集合,封装跳转方法等。还提到可通过path找相应class跳转并携带参数,可借助eventBus处理onResult。最后表示老师认为当前方式不够优雅,下一篇将手撸注解实现功能。

现在我们就开始写一个最简单的ARouter,其实就是模仿。

根据老师讲解的内容,我理解的ARouter就是管理所有lib的Activity的一个集合。

所以创建一个ARouter的module.

创建一个ARouter的类,然后实现单例,并创建一个HashMap来存放Activity的集合

 

然后创建一个方法将Activity放入到集合中

/**
 * 将Activity的类对象添加到map中
 *
 * @param path
 * @param clazz
 */
public void putActivity(String path, Class<? extends Activity> clazz) {
    if (path != null && clazz != null) {
        activitys.put(path, clazz);
    }

}

同样的  我们还需要将跳转的方法封装一下

/**
 * 跳转方法
 *
 * @param path
 * @param bundle
 */
public void jumpToActivity(String path, Bundle bundle) {
    Class<? extends Activity> aClass = activitys.get(path);
    if (aClass == null) {
        return;
    }
    Intent intent = new Intent(context, aClass);
    if (bundle != null) {
        intent.putExtra("bundle", bundle);
    }
    context.startActivity(intent);

}

通过path来找到相应的class进行跳转,同时可以携带参数,如果还涉及到onResult的话,其实可以通过eventBus之类的来实现。至于context,我们可以创建一个init方法,在application里将初始化一下,获取到context。

下面就是要将Activity放入到集合中

我们创建一个接口

public interface IRouter {
    void putActivity();
}

最简单的方法就是每一个module里创建一个Activity管理者,然后实现IRouter接口

 

public class ActivityUtils implements IRouter {
    @Override
    public void putActivity() {
        ARouter.getInstance().putActivity("login/login",LoginModuleActivity.class);
        ARouter.getInstance().putActivity("login/login",LoginModule1Activity.class);
        ARouter.getInstance().putActivity("login/login",LoginModule2Activity.class);
    }
}

我其实觉得这样已经挺好的了,哈哈哈哈哈哈,但是老师觉得这样不够优雅,太过于繁琐,所以他想到了用注解的方式来实现这样一个功能。

所以下一篇我们就来再手撸一个注解。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值