ARouter(七) 依赖注入

当你从FirstActivity跳到SecondActivity, 有时需要把参数值放在intent里面传过去。

ARouter的依赖注入会帮你在SecondActivity里面的属性直接赋好参数值。 当然需要你事先在SecondActivity已经定义好属性,并且是public的。

 

先看下面的代码:

添加了两个接受参数的属性。

public class SecondActivity extends AppCompatActivity {

    @Autowired
    public int testInt;

    @Autowired
    public String testString;

    
    public void onCreated(){
       ARouter.inject(this);
    }
}

 

FirstActivity 通过ARouter打开SecondActivity,SecondActivity在执行 ARouter.inject(this)后,int testInt;   String testString 这两个属性会被赋好值。

public class FirstActivity extends AppCompatActivity {

    public void onClick(View view){
          
       ARouter.getInstance()
                    .build("/app/SecondActivity")
                    .withInt("testInt", testInt)
                    .withString("testString", testString)
                    .Navigation();               

    }
}

以上是ARouter依赖注入的功能表现。当然不仅仅限于Activity,也可以是Fragment。

 

那么是如何实现的呢?

下面这个类是ARouter根据注解自动生成的类。

public class SecondActivity$$ARouter$$Autowired implements ISyringe {
  private SerializationService serializationService;

  @Override
  public void inject(Object target) {
    serializationService = ARouter.getInstance().navigation(SerializationService.class);
    SecondActivitysubstitute = (SecondActivity)target;
    substitute.testInt = substitute.getIntent().getIntExtra("testInt", substitute.testInt);
    substitute.testString = substitute.getIntent().getStringExtra("testString");
  }
}

再来看一下ARouter.inject(this)最后调用的是什么。最后调用的就是上面SecondActivity$$ARouter$$Autowired类的inject方法。inject()里面的就是我们平时常用的方式。

    static void inject(Object thiz) {
        AutowiredService autowiredService = ((AutowiredService) ARouter.getInstance().build("/arouter/service/autowired").navigation());
        if (null != autowiredService) {
            autowiredService.autowire(thiz);
        }
    }

这个有一个坑要说一下,由于赋值是依赖intent的,而在onNewIntent回来的时候,并没有intent, 导致依赖注入失败。原因是没有先setIntent(intent); 然后再调用ARouter.inject(this)就不会有问题。

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        setIntent(intent);
        
        ARouter.inject(this);
    }

像上面那样使用就可以了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值