package com.example.app3.butterknifezhujie; import android.app.Activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import com.example.app3.R; import java.lang.reflect.Field; public class BufferActivity extends AppCompatActivity { @IBinView(R.id.button04) public Button Button04; @IBinView(R.id.button01) public Button Button01; public Button getButton02; @IBinView(R.id.button02) public Button Button02; @IBinView(R.id.button03) public Button Button03; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_buffer); //有4注解 initId(this); Button01.setText("1509D"); Button02.setText("1509D"); Button03.setText("1509D"); Button04.setText("1509D"); } public static void initId(Activity activity){ Class clazz = activity.getClass() ; //获取当前类的所有属性 Field [] fields = clazz.getFields(); // 遍历属性 for (Field field : fields){ // 判断当前属性 身上是否有IBindView 注解 if(field.isAnnotationPresent(IBinView.class)){ // 获取当前属性身上的注解 IBinView iBindView = field.getAnnotation(IBinView.class); //取出注解 对应的值 int id = iBindView.value(); //查找控件 View view = activity.findViewById(id); try { // 把view 设置给当前的属性 field.set(activity,view); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } }
package com.example.app3.butterknifezhujie; 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 gq on 2017/11/29. */ @Documented @Target(ElementType.FIELD)//作用在字段 @Retention(RetentionPolicy.RUNTIME) //运行时 public @interface IBinView { int value(); //注解里面的方法都是抽象方法 }