arouter跨module传递消息_Android 组件化+ARouter 开发之路

目录

本文主要做一个记录,搭建组件化+ARouter+MVP 框架过程中遇到的一些问题

一、参考资料

以上文章有好有坏,也有几处不全的地方,所以想学习组件化 需要多看几篇文章,不要让一个人的文章限制了你的思维

当然,实际开发中也不只看了上面几篇文章,但是上面几个文章相对质量比较好,我是参考第三个链接,再根据其他文章综合考虑做的方案。

二、使用

1⃣️、ARouter 框架通讯:MainModule通过IProvider获取某个类的对象

例如获取某个Fragment

Main Module中的代码(提供者接口类)

import com.alibaba.android.arouter.facade.template.IProvider;

public interface LaundryLibPrivoder extends IProvider {

Fragment creatFragment();

}

在目标Module 中写代码 RouterPath.GET_LAUNDRY_LIB_LAUNDRY_FRAGMENT 是一个自定义路径,

@Route(path= RouterPath.GET_LAUNDRY_LIB_LAUNDRY_FRAGMENT)

public class LaundryLibPrivoderImpl implements LaundryLibPrivoder {

@Override

public Fragment creatFragment() {

LaundryListFragment fragment = LaundryListByDeviceTypeFragment.newInstance(null);

return fragment;

}

@Override

public void init(Context context) {

}

}

在MainModule中调用

方法一: 依赖@Autowired注解来获取这个provider

记得inject 方法尽早调用,并且不要在inject调用之后直接马上调用@Autowired注解的对象 ,有可能会报空指针

public class AppHomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

private static final String TAG = "AppHomeActivity";

@Autowired

LaundryLibPrivoder movieListProvider;

public static void startAppHomeActivity(Activity context) {

Intent intent = new Intent(context, AppHomeActivity.class);

context.startActivity(intent);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_home);

ARouter.getInstance().inject(this);

findViewById(R.id.bt_jump_washer_list).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Fragment fragment = movieListProvider.creatFragment();

getSupportFragmentManager().beginTransaction().add(R.id.fly_laundry_list, fragment).commit();

}

});

}

@Override

public boolean onNavigationItemSelected(@NonNull MenuItem item) {

return false;

}

}

方法二: 通过Arouter反射获取

Fragment fragment = ARouter.getInstance().navigation(LaundryLibPrivoder.class).creatFragment();

2⃣️、跨module的页面跳转

方法一:通过路径直接跳转

Postcard postcard = ARouter.getInstance().build(path).postcard.navigation();

方法二:通过Uri跳转

android:host="**.**.com"//把**替换成你想要的名字

android:scheme="arouter" />

Uri testUriMix = Uri.parse("arouter://**.**.com"+RouterPath.TO_LAUNDRY_LIB_SHOP_LIST);

ARouter.getInstance().build(testUriMix)

.withString("key1", "value1")

.navigation();

以上两种方式都需要在目标界面添加路径

@Route(path = RouterPath.TO_LAUNDRY_LIB_SHOP_LIST)

public class LaundryShopListActivity extends AppCompatActivity {}

三、问题记录

上面 链接 里面挺全的。

一:ARouter传值失败

大致意思就是:接受的一方如果使用@Autowired进行传值的,则需要注意 字段名称与参数Key相同,并且尽量初始化(不初始化有可能接受不到值)

本文地址:https://blog.csdn.net/JiaoJunfeng/article/details/108579844

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[ 4.858794] uwe5621_bt_tty_init [ 4.862131] mtty_probe unisoc soc, continue [ 4.868449] mtty_probe init device addr: 0x000000007db4bee8 [ 4.868608] rfkill_bluetooth_init [ 4.871951] rfkill_bluetooth_init end [ 4.872048] marlin_sdio_init [ 4.873682] mtty_probe unisoc soc, continue [ 4.873724] sysfs: cannot create duplicate filename '/devices/virt[ 4.873829] CPU: 1 PID: 121 Comm: init Not tainted 4.19.193 #34 [ 4.873842] Hardware name: ROC-RK3566-PC HDMI(Android) (DT) [ 4.873849] Call trace: [ 4.873868] dump_backtrace+0x0/0x178 [ 4.873876] show_stack+0x14/0x20 [ 4.873886] dump_stack+0x94/0xb4 [ 4.873895] sysfs_warn_dup+0x64/0x80 [ 4.873902] sysfs_create_dir_ns+0xdc/0xf8 [ 4.873910] kobject_add_internal+0xa0/0x288 [ 4.873916] kobject_add+0x98/0x100 [ 4.873928] device_add+0xec/0x698 [ 4.873934] device_register+0x1c/0x28 [ 4.873945] tty_register_device_attr+0xe4/0x208 [ 4.873951] tty_register_driver+0x138/0x248 [ 4.873970] mtty_probe+0x144/0x33u0 [sprdbt_tty] [ 4.873978] platform_drv_probe+0x50/0xa8 [ a 4.873984] really_probe+0xl228/0x2a0 [ 4.873991] driver_probe_device+0x58/0x100 [ 4.873996] device_driver_attach+0x6c/0x78 [ 4.874001] __driver_attach+0xb0/0xf0 [ 4.874009] bus_for_each_dev+0x68/0xc8 [ 4.874014] driver_attach+0x20/0x28 [ 4.874019] bus_add_driver+0xf8/0x1f0 [ 4.874025] driver_register+0x60/0x110 [ 4.874031] __platform_driver_register+0x40/0x48 [ 4.874044] uwe5621_bt_tty_init+0x44/0x1000 [sprdbt_tty] [ 4.874052] do_one_initcall+0x48/0x240 [ 4.874061] do_init_module+0x5c/0x1c8 [ 4.874069] load_module+0x18f8/0x1f68 [ 4.874074] __se_sys_finit_module+0xc0/0xd8 [ 4.874079] __arm64_sys_finit_module+0x14/0x20 [ 4.874087] el0_svc_common.constprop.0+0x64/0x178 [ 4.874092] el0_svc_handler+0x28/0x78 [ 4.874097] el0_svc+0x8/0xc [ 4.874179] kobject_add_internal failed for ttyBT0 with -EEXIST/, don't try to register things twith the same name in the same directory. [ 4.874225] list_del corruption, ffffffc079941ea8->next is LIST_POISON1 (dead000000000100) [ 4.874270] ------------[ cut here ]------------
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值