定义注解:


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() {@Overridepublic 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();@Overrideprotected 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");}}



更多相关文章

  1. Android(安卓)自定义Adapter
  2. Layer_list(层叠图片)
  3. android WebView使用示例
  4. Android显示网络图片
  5. 自定义数据适配器
  6. Unable to instantiate receiver
  7. Android(安卓)测试自定义纯数字软键盘
  8. ContentPRovider示例
  9. pagertab 自定义控件碎片滑动

随机推荐

  1. Android(安卓)自定义控件实现ListView索
  2. Android(安卓)操作蓝牙Ble时数据转换的常
  3. Android(安卓)4.0 编译全程
  4. android 编译出来的执行文件 not executa
  5. android 解压缩zip包
  6. 初识React Native
  7. Error generating final archive: Debug
  8. Android(安卓)获取WebView的高度
  9. 在Android中怎么增加一个类似于framework
  10. Android(安卓)java.lang.StackOverflowEr