android click事件注解
16lz
2021-01-26
定义注解:
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");}}
更多相关文章
- Android(安卓)自定义Adapter
- Layer_list(层叠图片)
- android WebView使用示例
- Android显示网络图片
- 自定义数据适配器
- Unable to instantiate receiver
- Android(安卓)测试自定义纯数字软键盘
- ContentPRovider示例
- pagertab 自定义控件碎片滑动