java基础 注解 android中的实现
来源:互联网 发布:php 将js encodeuri 编辑:程序博客网 时间:2024/06/08 09:22
先贴实现的activity的代码:
@ContentView(R.layout.activity_main)public class MainActivity extends AppCompatActivity { @ViewInject(R.id.text_view) private TextView textView; @OnClick(R.id.text_view) private void onClick(View view){ textView.setText("我是click后的textview"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewInjectUtils.inject(this); textView.setText("我是click前的textview"); }}
ContentView(类)注解实现:
1、定义注解
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ContentView { int value(); }
2、实现注解
Field注解实现
1、定义注解
@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ViewInject { int value();}
2、实现注解
private static void injectView(Activity activity) { Class<? extends Activity> clazz = activity.getClass(); //获得activity的所有成员变量 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { //获得每个成员变量上面的ViewInject注解,没有的话,就会返回null ViewInject viewInject = field.getAnnotation(ViewInject.class); if (viewInject != null) { int viewId = viewInject.value(); View view = activity.findViewById(viewId); try { field.setAccessible(true); field.set(activity, view); } catch (IllegalAccessException e) { e.printStackTrace(); } } } }
接口(方法)注解实现
1、定义注解
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface OnClick { int[] value();}
2、实现注解
public class ViewInjectUtils { public static void inject(Activity activity) { injectContentView(activity); injectView(activity); injectEvent(activity); } private static void injectEvent(final Activity activity) { Class<? extends Activity> clazz = activity.getClass(); Method[] methods = clazz.getDeclaredMethods(); for (final Method method2 : methods) { OnClick click = method2.getAnnotation(OnClick.class); if (click != null) { int[] viewId = click.value(); method2.setAccessible(true); Object listener = Proxy.newProxyInstance(View.OnClickListener.class.getClassLoader(), new Class[]{View.OnClickListener.class}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method2.invoke(activity, args); } }); try { for (int id : viewId) { View v = activity.findViewById(id); Method setClickListener = v.getClass().getMethod("setOnClickListener", View.OnClickListener.class); setClickListener.invoke(v, listener); } } catch (Exception e) { e.printStackTrace(); } } } }
0 0
- java基础 注解 android中的实现
- Java中的注解基础
- Java中的注解基础
- Java中的注解基础
- Java和Android中的注解
- android 框架基础之java注解
- Android中的自定义注解(反射实现-运行时注解)
- Android中的自定义注解(反射实现-运行时注解)
- Android中的自定义注解(反射实现-运行时注解)
- Android中的自定义注解(反射实现-运行时注解)
- Android中的自定义注解(反射实现-运行时注解)
- Android中的注解入门篇——Java注解
- [译]Java并发:@GuardedBy----Android中的注解
- Java注解(1)-注解基础
- java基础-注解一-注解基础
- android之注解基础
- JAVA基础加强:注解
- java基础学习-注解
- WinCE OAL中的Startup.s介绍
- 医疗web之我思考
- img图片属性
- 网络编程知识(5)--用Netty实现的一个简单的HTTP服务器
- easyui打开dialog后给弹出框内输入框赋值问题
- java基础 注解 android中的实现
- 如何修改本地hosts文件
- python daemon 守护进程对信号的处理
- NSFileManager简单操作
- jquery插件汇总
- setTimeout定时器陷阱
- HTML5移动应用开发最容易踩到的几个坑
- ListView显示SQLite数据,EditText对数据检索。(全国城市名的显示和搜索)
- lamp安装