现在我们就开始写一个最简单的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); } }
我其实觉得这样已经挺好的了,哈哈哈哈哈哈,但是老师觉得这样不够优雅,太过于繁琐,所以他想到了用注解的方式来实现这样一个功能。
所以下一篇我们就来再手撸一个注解。