自定义ButterKnife
来源:互联网 发布:华东政法研究生知乎 编辑:程序博客网 时间:2024/06/15 06:00
compile 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮1" /> <Button android:id="@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮2" /> <Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮3" /> <Button android:id="@+id/bt4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮4" /></LinearLayout>
IBindView.java
import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by lenovo on 2017/11/28. */@Documented@Target(ElementType.FIELD)//作用域@Retention(RetentionPolicy.RUNTIME)//运行时在作用public @interface IBindView { int value();}
IOnClick.java
import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by lenovo on 2017/11/28. */@Documented@Target(ElementType.METHOD)//方法@Retention(RetentionPolicy.RUNTIME)public @interface IOnClick { int value();}
MainActivity.java
package panjiangang.bwie.com.lianxi1_day02;import android.app.Activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Main2Activity extends AppCompatActivity { @IBindView(R.id.bt1) public Button bt1; @IBindView(R.id.bt2) public Button bt2; @IBindView(R.id.bt3) public Button bt3; @IBindView(R.id.bt4) public Button bt4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initId(this);// initClick(this);//有监听事件的方法 bt1.setText("A"); bt2.setText("B"); bt3.setText("C"); bt4.setText("D"); } public static void initId(Activity activity) { Class clazz = activity.getClass(); //获取当前类的所有属性 Field[] fields = clazz.getFields();//所有公开的字段 (属性) // 遍历属性 for (Field field : fields) { // 判断当前属性 身上是否有IBindView 注解 if (field.isAnnotationPresent(IBindView.class)) { // 获取当前属性身上的注解 IBindView iBindView = field.getAnnotation(IBindView.class); //取出注解 对应的值 int id = iBindView.value(); //查找控件 View view = activity.findViewById(id); try { // 把view 设置给当前的属性 field.set(activity, view); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } public static void initClick(final Activity activity) { Class clazz = activity.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(IBindView.class)) { IBindView bindView = field.getAnnotation(IBindView.class); View view = activity.findViewById(bindView.value()); try { field.set(activity, view); // 获取当前类的public 方法 Method[] methods = clazz.getMethods(); for (final Method method : methods) { //判断当前方法上是否有IOnClick 注解 if (method.isAnnotationPresent(IOnClick.class)) { //获取方法上的注解 IOnClick click = method.getAnnotation(IOnClick.class); // 获取注解值 int id = click.value(); //点击事件出发条件 if (bindView.value() == id) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { // 调用点击事件方法 method.invoke(activity); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }); } } } } catch (IllegalAccessException e) { e.printStackTrace(); } } } } @IOnClick(R.id.bt4) public void onViewClicked() { Toast.makeText(this, "bt4", Toast.LENGTH_SHORT).show(); }}
阅读全文
0 0
- 自定义ButterKnife
- 自定义ButterKnife
- butterknife自定义view出错
- ButterKnife
- ButterKnife
- ButterKnife
- ButterKnife
- ButterKnife
- ButterKnife
- ButterKnife
- butterknife
- ButterKnife
- ButterKnife
- Butterknife
- butterknife
- ButterKnife
- ButterKnife
- butterknife
- define 语句中的 # 和 ## 的作用与区别
- VGA分辨率无法识别或错误通过添加自定义配置参数正确显示(Ubuntu/Windows)
- 自顶向下,逐步求精的程序设计方法。
- 【总结】尺取模板
- SpringBoot中设置Hibernate format_sql
- 自定义ButterKnife
- 如何创建一个最简单的Linux自启动服务?
- 图解设计模式
- S11关联容器
- 【2017.11.29】2.Add Two Numbers
- MyBatis 动态SQL
- the difference between isinstance and type in python
- 求一个数的阶乘
- 怎样解决在Word中插入公式后行距变宽了