路由图片通信
使用的时候如下:
---> 某个组件模块
@Parameter(name = "/order/getDrawable")
OrderDrawable orderDrawable;
ParameterManager.getInstance().loadParameter(this);
((ImageView)findViewById(R.id.image)).setImageResource(orderDrawable.getDrawable());
应用场景:某个模块组件的图片其他组件想要使用,这个时候的处理方式
我们不应该吧所有图片放到common层,这个频繁更改应该交给业务组件。
1.arouter_api
Call 标准规则定义(接口定义)
package top.zcwfeng.arouter_api;
/**
* 组件和组件之间共享
* 如:图片共享,Bean 共享
*/
public interface Call {
// TODO: 共享组件 高层定义
}
2. common
OrderDrawable 继承Call order 组图片标准规则的定义
package top.zcwfeng.common.order.drawable;
import top.zcwfeng.arouter_api.Call;
// TODO: 共享组件 暴露接口
public interface OrderDrawable extends Call {
int getDrawable();
}
3. order
OrderDrawableImpl 这种的具体实现嫁给具体模块order
package top.zcwfeng.order.impl;
import top.zcwfeng.arouter_annotation.ARouter;
import top.zcwfeng.common.order.drawable.OrderDrawable;
import top.zcwfeng.order.R;
// TODO: 组件共享 3 暴露接口
@ARouter(path = "/order/getDrawable")
public class OrderDrawableImpl implements OrderDrawable {
@Override
public int getDrawable() {
return R.drawable.ic_ac_unit_black_24dp;
}
}
注意 @ARouter(path = "/order/getDrawable") 我们需要生成
RouterManager.getInstance().build("/order/getDrawable").navigation(t);
最终我们会生成这样的代码
目标生成代码.png4.arouter_compiler
ArouterProcess 增加修改代码
5. arouter_compiler
ParameterProcess/ParameterFactory 修改代码
6.arouter_api
RouterManager/BundleManager 修改代码 ,BundleManager增加Call的定义,RouterManager 扩展跳转
CALL 分支的跳转
...
// TODO 第三步 跳转
if (loadPath != null) { // 健壮
if (loadPath.getPathMap().isEmpty()) { // pathMap.get("key") == null
throw new RuntimeException("路由表Path报废了...");
}
// 最后才执行操作
RouterBean routerBean = loadPath.getPathMap().get(path);
if (routerBean != null) {
switch (routerBean.getTypeEnum()) {
case ACTIVITY:
Intent intent = new Intent(context, routerBean.getMyclass()); // 例如:getClazz == Order_MainActivity.class
intent.putExtras(bundleManager.getBundle()); // 携带参数
context.startActivity(intent, bundleManager.getBundle());
break;
//可以自己扩展 类型
case CALL:
Class<?> clazz = routerBean.getMyclass();
Call call = (Call) clazz.newInstance();
bundleManager.setCall(call);
return bundleManager.getCall();
}
}
}
...
CALL ---> routerBean.getMyclass(); 拿到的是我们注解生成的类
@ARouter(path = "/app/MainActivity")
public class MainActivity extends AppCompatActivity {
@Parameter(name = "/order/getDrawable")
OrderDrawable orderDrawable;
。。。
对应注解生成MainActivity$$Parameter
public class MainActivity$$Parameter implements ParameterGet {
@Override
public void getParameter(Object targetParameter) {
MainActivity t = (MainActivity)targetParameter;
t.orderDrawable = (OrderDrawable)
RouterManager.getInstance().build("/order/getDrawable").navigation(t);
}
}
RouterManager.getInstance().build("/order/getDrawable").navigation(t); 通过导航到我们的暴露点Order 模块生成
package top.zcwfeng.customarouter;
import java.lang.Override;
import java.lang.String;
import java.util.HashMap;
import java.util.Map;
import top.zcwfeng.arouter_annotation.bean.RouterBean;
import top.zcwfeng.arouter_api.ARouterPath;
import top.zcwfeng.order.Order_MainActivity;
import top.zcwfeng.order.impl.OrderDrawableImpl;
public class ARouter$$Path$$order implements ARouterPath {
@Override
public Map<String, RouterBean> getPathMap() {
Map<String, RouterBean> pathMap = new HashMap<>();
pathMap.put("/order/getDrawable", RouterBean.create(RouterBean.TypeEnum.CALL,OrderDrawableImpl.class,
"/order/getDrawable","order"));
pathMap.put("/order/Order_MainActivity", RouterBean.create(RouterBean.TypeEnum.ACTIVITY,Order_MainActivity.class,
"/order/Order_MainActivity","order"));
return pathMap;
}
}
最终导航到 OrderDrawableImpl.class
不再是前面Activity级别的Order_MainActivity.class ,而是参数指定的接口实现类
MainActivity-> 懒加载ParameterManager.getInstance().loadParameter(ParameterGet 接口)
-> MainActivity$$Parameter 生成代码的navigation()
-> RouterManager -> 跳转Call 类型
-> 返回我们的暴露点Order 实现 OrderDrawableImpl
-> OrderDrawableImpl#getDrawable()# return R.drawable.ic_ac_unit_black_24dp
这就是OrderDrawable orderDrawable 整个赋值的流程
2020-11-28 15:37:14.897 6002-6002/top.zcwfeng.customarouter E/zcw_arouter: loadParameter 参数接收
2020-11-28 15:37:14.898 6002-6002/top.zcwfeng.customarouter E/zcw_arouter: navigation 路由跳转
2020-11-28 15:37:14.907 6002-6002/top.zcwfeng.customarouter E/zcw_arouter: CALL 跳转类型top.zcwfeng.order.impl.OrderDrawableImpl
路由Bean通信
- common IUser 继承Call ,order 组 bean标准定义
- order UserInfo Bean资源(相当于 导入图片到Drawable这个步骤)准备资源
- order OrderUserImpl 最终的具体实现交给模块Order
- 其他模块如,app.MainActivity壳使用Bean /personal.PersonalMainActivity 使用Bean
步骤和图片通信是一致的。
网友评论