定义注解:

package com.fyfeng.android.annotations;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(value = RetentionPolicy.RUNTIME)

@Target(value = { ElementType.METHOD })

public @interface ClickMethod {

int id();

}

注解处理:

package com.fyfeng.android.annotations;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import android.app.Activity;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

public class AnnotationUtils {

private static final String tag = AnnotationUtils.class.getSimpleName();

public void init(final Activity activity) {

this.bindClick(activity);

}

public void bindClick(final Activity activity) {

Method[] methods = activity.getClass().getDeclaredMethods();

for (int k = 0; k < methods.length; k++) {

final Method m = methods[k];

Log.d(tag, "method[" + m.getName() + "]");

if (!m.isAnnotationPresent(ClickMethod.class)) {

continue;

}

ClickMethod click = m.getAnnotation(ClickMethod.class);

Log.d(tag, m.getName() + " 发现注解.");

final View view = activity.findViewById(click.id());

view.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try {

m.invoke(activity, new Object[] {});

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

}

});

}

}

}

使用示例:

package com.fyfeng.test;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import com.fyfeng.android.annotations.AnnotationUtils;

import com.fyfeng.android.annotations.ClickMethod;

public class MainActivity extends Activity {

private static final String tag = MainActivity.class.getSimpleName();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

AnnotationUtils autil = new AnnotationUtils();

autil.init(this);

}

@ClickMethod(id = R.id.text)

public void doClick() {

Log.d(tag, "----------------------");

}

@ClickMethod(id=R.id.text2)

public void doSecClick(){

Log.d(tag, "----------------------1");

}

}

android 注解点击事件,android click事件注解相关推荐

  1. android按钮点击变化,Android实现按钮点击效果(第一次点击变色,第二次恢复)...

    1.首先创建一个按钮 android:id="@+id/click" android:layout_width="fill_parent" android:la ...

  2. 不同dom的blur事件和click事件发生冲突

    直接上测试代码 <!DOCTYPE html> <html lang="en"> <head><title>不同dom的blur事件 ...

  3. 移动端touch事件和click事件的区别

    移动端touch事件和click事件的区别 1.touch事件 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动 ...

  4. blur事件与click事件冲突的解决办法

    问题 当对节点同时添加 blur事件 以及 click事件,触发 click事件 的时候程序报出这样的一个错误(Chrome浏览器): Uncaught NotFoundError: Failed t ...

  5. android viewgroup点击变色,Android ViewGroup事件分发

    上篇文章已经分析了Android的Touch事件分发.如果没看的建议先看一下.Android View的Touch事件分发. 接下来我们开始写几种场景,得出一个初步的执行顺序,然后我们按照这个顺序开始 ...

  6. android 模拟点击localinstrumentation,Android Instrumentation模拟鼠标点击事件

    看了几遍网上的博客一直没有 模拟出鼠标点击事件和按钮事件,后来抱着试试态度再重试的时候终于有所斩获.下面把具体的情况记录一下: 首先我们必须了解类 Instrumentation: Instrumen ...

  7. android 模拟手指点击,『Android Tip』-- 模拟手势操作

    平时 Android 开发中总会遇到奇葩的功能或者需求,这里做个记录和积累,以便后面开发过程中遇到类似的问题,可以快速的解决.Android tips 前言 这个版本终于快结束了,历时一个月的时间,这 ...

  8. click和touchmove vue_移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法...

    这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且to ...

  9. blur事件与click事件的冲突

    定义: blur事件:当元素失去焦点时发生 blur 事件 click事件:当单击元素时,发生 click 事件 在开发中会发现存在以下场景,点击当前输入框以外的其他元素.此时输入框失焦触发blur事 ...

  10. blur事件和ajax,js关于blur事件阻塞click事件

    出现场景: 页面有一个输入框A绑定了blur事件,且这个事件里面需要用到ajax请求数据,然后有一个按钮B绑定了点击事件: 在A里面输入完信息后, 还没失去焦点的时候点击B,这个时候发现只执行了A的b ...

最新文章

  1. python文件输入和输出
  2. 学python有哪些书推荐-有什么Python学习的书籍和学习资源推荐?
  3. 两张超级大表join优化
  4. 《Dreamweaver CS6完美网页制作——基础、实例与技巧从入门到精通》——1.3 常用网页设计软件...
  5. js多层对象数组 合并_13个你必须知道的JS数组技巧
  6. python模拟点击网页按钮_网页自动化开发(第一章)
  7. Linux内存page,Linux虚拟内存管理 - Page Table的作用
  8. win7电脑浏览器证书过期的解决方法
  9. SpringBoot------拦截器Filter的使用
  10. Hibernate 教程(一)[Hibernate的基本配置]
  11. 禁止QQ自动转义表情字符
  12. java多线程 Semaphore CountDownLatch ScheduledExecutorService
  13. 使用iText对pdf中敏感信息进行马赛克处理
  14. Google商店应用上架注意事项
  15. 38家公司上榜2020大中华区最佳职场;中国新生代企业家调研白皮书正式发布 | 美通企业日报...
  16. 钟平程序员逻辑英语——回归理性——中英文对切基本公式(1-1)
  17. MySQL备份恢复之XtraBackup
  18. Chicken Soup 【阻碍你成长的最大敌人竟然是它-无意识】
  19. 源火星球——青龙 详细教程
  20. “贵系万花筒”:探秘清华计算机系背后的“酒井”文化

热门文章

  1. spring安全_Spring安全–幕后
  2. c++编写web服务_让我们编写一个文档样式的Web服务
  3. jaxb 命名空间_在JAXB解组期间应用名称空间
  4. permgen_什么是PermGen泄漏?
  5. java jsr_Java EE 7中包含哪些JSR?
  6. esb 和mq_使用保险丝结构管理MQ和ESB的大型部署,第一部分
  7. 超越JAX-RS规范:Apache CXF搜索扩展
  8. 使用Infinispan作为持久性解决方案
  9. 带有自定义模块的JBoss EAP上的骆驼
  10. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体