这样开发Android好轻松哦

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

/**
 * 
 * @author thinkwyp
 * 
 */

public class MainActivity extends Activity {
    //这里对应的xml里面控件的id
    @CreateView(value = "text1")
    //这是与上面对应的控件类型
    private TextView text1;
    @Override
    protected void onCreate(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
 * 
 */
public class Utils {
    public static void injectObject(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);
                }
            }
        }
    }
    public static int findId(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好轻松第一课就这样结束了。。。。多多关注,以后会有更多的,嘿嘿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章