Dakaring的专栏

最近突发奇想,每次new 一个AndroidProject之后就要开始繁琐的布局,,找控件啊,先要定义控件,然后findViewById之后,开始赋值啊,什么的,那么烦的一套完成之后代码已经很多行了,我就在想可不可以简化一下那?有的说用框架,最近那么流行的几大android框架可以注解啊什么的,很轻松的就实现了,可是你们只知道用它,不知道怎么实现的,那么问题来了,如何自己写一个那,很简单。。。。。话不多说,直接上代码!!!!!!! 这里面就用到了一个接口,一个工具类,放在自己的项目当中,直接调用就好了,不用再导包什么的。。。。

/** * * @author thinkwyp * */{//这里对应的xml里面控件的id@CreateView(value = “text1”)//这是与上面对应的控件类型private TextView text1;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {//只需要这么一句话就可以轻松的实现控件的寻找Utils.injectObject(this, this,R.id.class);} catch (Exception e) {e.printStackTrace();}//后面只管对控件进行操作了text1.setText(“哈哈还不行啊”);}}

这是主的activity,里面用到的@CreateView其实是一个接口,上代码

/** * * @author thinkwyp * */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface CreateView {String value();}

这个接口就是这么简单。。。。。。 然后具体的实现还是在后面这个工具类中,直接上代码,请注意。。

/** * * @author thinkwyp * */{(Object obj, Activity activity, Class idClass)throws Exception {Class<?> classType = obj.getClass();Field[] fields = classType.getDeclaredFields();for (int i = 0; fields != null && i < fields.length; i++) {Field field = fields[i];if (field.isAnnotationPresent(CreateView.class)) {CreateView annotation = field.getAnnotation(CreateView.class);String name = annotation.value();if (TextUtils.isEmpty(name)) {continue;}int id = findId(name, idClass);if (id <= 0) {continue;}View v = activity.findViewById(id);if (v != null) {field.setAccessible(true);field.set(obj, v);}}}}(String idName, Class r)throws IllegalArgumentException, IllegalAccessException {Class c = r;Field[] fields = c.getDeclaredFields();for (int i = 0; i < fields.length; i++) {Field field = fields[i];String name = field.getName();if (name.equalsIgnoreCase(idName)) {int id = field.getInt(name);return id;}}return 0;}}

这个工具类实现可能有点复杂,但是还是可以接受的。。。 开发android好轻松第一课就这样结束了。。。。多多关注,以后会有更多的,嘿嘿

困难与折磨对于人来说,是一把打向坯料的锤,

Dakaring的专栏

相关文章:

你感兴趣的文章:

标签云: