android 超级简单方便的注解注入控件和方法
来源:互联网 发布:网络项目实施计划书 编辑:程序博客网 时间:2024/05/17 23:45
1 注入控件变量的注解类
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.CLASS)@java.lang.annotation.Target(value = { java.lang.annotation.ElementType.FIELD })public @interface FindView {public int value();}
2 注入方法绑定的注解类,使用数组因为可能多个id绑定同一个事件
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.CLASS)@java.lang.annotation.Target(value = { java.lang.annotation.ElementType.METHOD })public @interface OnClick {public abstract int[] value();}
3 实现类
public class Injector {public boolean set_bind_field = true;public boolean set_bind_method = true;/** * inject for field and method that be annotated * * @param obj * Bind Object * @param view * Content View */public void inject(final Object obj, View view) {if (set_bind_field) {Field[] privatefields = obj.getClass().getDeclaredFields();for (Field f : privatefields)bindField(obj, f, view);}if (set_bind_method) {Method[] privatemethods = obj.getClass().getDeclaredMethods();for (final Method m : privatemethods)bindMethod(obj, m, view);}}public void inject(final Activity activity) {inject(activity, activity.getWindow().getDecorView());}// ///////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////* * bind field */private static void bindField(Object obj, Field f, View view) {f.setAccessible(true);FindView anno = f.getAnnotation(FindView.class);if (anno != null)try {f.set(obj, view.findViewById(anno.value()));} catch (Exception e) {}}/* * bind method to view by id */private static void bindMethod(final Object obj, final Method m, View view) {m.setAccessible(true);OnClick oc = m.getAnnotation(OnClick.class);if (oc != null)try {OnClickListener clickListener = new View.OnClickListener() {public void onClick(View v) {try {m.invoke(obj, new Object[] {});} catch (Exception e) {}}};for (int id : oc.value())try {view.findViewById(id).setOnClickListener(clickListener);} catch (Exception e) {}} catch (Exception e) {}}}
4 使用 MainActivity.java
public class MainActivity extends Activity {@FindView(R.id.btn)public Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Injector().inject(this);button.setText("hello");}@OnClick({ R.id.btn })private void tt() {Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();}}
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="100dp" /></LinearLayout>
1 0
- android 超级简单方便的注解注入控件和方法
- Android 注解的使用 xUtils3和ButterKnife控件的注解注入对比
- 方便的自动Spring注解注入
- 超级方便的Ajax控件-MagicAjax
- 表单检验的超级方便的方法
- 超级方便的boost安装方法
- 【Android 进阶】EventBus---超级方便的工具
- android studio获取MD5和SHA1值最简单方便的方法
- Android环境搭建的最新方法,方便、简单、极度容易。
- 一个简单方便的ANSI和UNICODE互转方法
- Android 简单方便的延时
- Android SDK自动升级为2.0的超级简单方法!!!
- 基于JXL的java excel操作,Android适用,超级方便!
- Springmvc注解注入的简单demo
- 超级方便的中英文翻译
- 最方便简单的经纬度查询方法
- Spring_4_注解的方法依赖注入
- Android控件点击事件的简单方法
- android 中使用svg 失量图标
- 查看v8编译js生成的机器代码
- virtualbox 安装ubutun15时不能共享文件
- 兼容不同浏览器上中文文件名的下载
- 两性之美
- android 超级简单方便的注解注入控件和方法
- POJ2028 When Can We Meet?
- index
- 通过 php 进行简单的缩略图裁剪
- 解决tableView滑不到底
- 移动端接口开发经验一二
- 33款可用来抓数据的开源爬虫软件工具
- Problem A: C语言习题5.19--递归方法实现逆序
- SQL索引学习-索引结构