首先定义一个ViewById
的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewById {
int value();
}
然后定义一个解析注解的工具类
public class ViewUtil {
public static void inject(Activity activity) {
// 获取当前类的字节码
Class<? extends Activity> clazz = activity.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
ViewById viewById = field.getAnnotation(ViewById.class);
if (viewById != null) {
int value = viewById.value();
View view = activity.findViewById(value);
// 设置可字段可访问
field.setAccessible(true);
try {
//赋值
field.set(activity, view);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
在MainActivity中使用
public class MainActivity extends AppCompatActivity {
@ViewById(R.id.tv)
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注入
ViewUtil.inject(this);
textView.setText("你好!");
}
}