目录
实现步骤
1.创建注解
创建的注解很简单,让注解作用于属性,并且运行时可见(@Retention默认就是运行时可见),然后注解的属性为整形(使用时接收控件id),代码如下:
@Target(AnnotationTarget.PROPERTY)//作用于属性
@Retention
annotation class BindView(val viewId:Int)
2.绑定控件
创建ButterKnife工具类,在ButterKnife中创建一个bind方法,用来读取注解的值并且通过findViewById给控件赋值
object ButterKnife {
fun bind(activity:Activity){
val activityClazz = activity::class
//遍历类中的属性
activityClazz.declaredMemberProperties.forEach {viewField->
//找出有BindView注解的属性
if(viewField.hasAnnotation<BindView>()){
//给属性赋值
viewField.findAnnotation<BindView>()?.let { bindViewAnnotation->
viewField.isAccessible = true
viewField.javaField?.set(activity,activity.findViewById(bindViewAnnotation.viewId))
}
}
}
}
}
3.Activity中使用
使用步骤跟ButterKnife几乎一样,我们这里是使用TextView做的测试,在绑定控件后给控件设置了显示的文字,代码如下:
class MainActivity : AppCompatActivity() {
@BindView(R.id.tv_msg)
private lateinit var tvMsg:TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ButterKnife.bind(this)
tvMsg.text = "你好"
}
}
最终运行结果如下:
网友评论