IOC实现ButterKnife(一)之注入布局与注入控件

这篇博客介绍了IOC(Inversion of Control)思想在Android开发中的应用,通过创建注解MContentView和mBindView,实现了无需setContentView()和findViewById()的动态布局与控件注入。博主详细阐述了从注解创建到逻辑处理的全过程,展示了在MainActivity中如何使用这些注解,以及InjectTool工具类中注入布局和控件的方法。
摘要由CSDN通过智能技术生成

IOC是什么?

是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的便是依赖注入。简单点说就是如果你在一个类A中实例化一个对象B,那么久需要在A类中使用new来进行实例化对象B,这样A和B的耦合度就很高,而IOC是通过注解让其进行动态生成,而不需要自己去实例化,以此来降低耦合度。(依赖注入核心)

需要用到的知识:

反射
注解
	如果不熟悉上面两个知识,可百度找一篇如果操作即可。

实现的最终结果:

注入布局:即让我们在代码中不需要写setContentView()方法,而是通过在类之上添加注解(MContentView)来动态生成:
在这里插入图片描述
注入控件:即在代码中不需要写findViewById方法,而是通过在属性之上添加注解(MBIndView)来动态生成:
在这里插入图片描述

实现过程:

实现注入布局过程:

思考1:要想实现在类上的注解,首先我们需要创建一个注解MContentView,而这个注解是作用在类之上,所以其作用域是类之上(ElementType.TYPE)并且我们的注解是在运行时使用的,所以声明其是运行时使用(RetentionPolicy.RUNTIME)。因此创建一个注解如下:

@Target(ElementType.TYPE)//作用在类上
@Retention(RetentionPolicy.RUNTIME)//运行时
public @interface MContentView {
   
  
}

思考2:由最终效果可知,因为我们需要代替setContentView(),而这个方法需要传入layoutId(R.layout.activity_main),所以注解中还要添加一个int类型的方法,如下:

@Target(ElementType.TYPE)//作用在类上
@Retention(RetentionPolicy.RUNTIME)//运行时
public @interface MContentView {
   
    int value() ;
}

至此注解MContentView已完成,在MainActivity中即可引用该注解并附上layoutId,如下图:
在这里插入图片描述

当写好注解后,我们便需要通过这个注解来处理我们需要的逻辑,因此写一个工具类(InjectTool)来实现,并在onCreate方法中将MainActivity引入,如图:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值