Google出了个绑定数据到XML上的功能,不过目前实现有点麻烦。详情可以去android官网查看,爬不过墙的可以BAIDU一下 Android数据绑定 Data Binding等类似词语。

其实还有一种耗资源的实现方式,大家到可以试一下效果, 代码:

import android.view.View;import android.view.ViewGroup;import android.widget.EditText;import android.widget.TextView;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * Created by anykaa on 15/10/29. */public class BindingData {    /**     * 绑定对应属性值到TextView和EditText控件上     * 规则:     * TextView控件, myProperty-->txt_myProperty     * EditText控件, myProperty-->etxt_myProperty     *     * @param root     * @param bean     */    public static void bind(View root, Object bean) {        if (root == null || bean == null) {            return;        }        if (root instanceof ViewGroup) {            View child;            String tmp = null;            Object arg = null;            for (int i = 0; i < ((ViewGroup) root).getChildCount(); i++) {                child = ((ViewGroup) root).getChildAt(i);                if (child instanceof TextView) {                    try {                        tmp = child.getResources().getResourceName(child.getId());                    } catch (Exception ex) {                        LogEnrising.i("发现没有设置id属性的TextView控件");                        continue;                    }                    tmp = tmp.substring(tmp.indexOf("/") + 1);                    Field[] fields = bean.getClass().getDeclaredFields();                    for (Field field : fields) {                        if (tmp.equals("txt_" + field.getName())) {                            field.setAccessible(true);                            try {                                if (field.getGenericType().toString().equals(                                        "class java.lang.String") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Double") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Integer") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Short")) {                                    Method m = (Method) bean.getClass().getMethod(                                            "get" + getMethodName(field.getName()));                                    arg = m.invoke(bean);// 调用getter方法获取属性值                                }                            } catch (Exception ee) {                                LogEnrising.i("反射取值出错:" + field.getName());                            }                            ((TextView) child).setText(String.valueOf(arg));                            break;                        }                    }                } else if (child instanceof EditText) {                    try {                        tmp = child.getResources().getResourceName(child.getId());                    } catch (Exception ex) {                        LogEnrising.i("发现没有设置id属性的EditText控件");                        continue;                    }                    tmp = tmp.substring(tmp.indexOf("/") + 1);                    Field[] fields = bean.getClass().getDeclaredFields();                    for (Field field : fields) {                        if (tmp.equals("etxt_" + field.getName())) {                            field.setAccessible(true);                            try {                                if (field.getGenericType().toString().equals(                                        "class java.lang.String") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Double") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Integer") ||                                        field.getGenericType().toString().equals(                                                "class java.lang.Short")) {                                    Method m = (Method) bean.getClass().getMethod(                                            "get" + getMethodName(field.getName()));                                    arg = m.invoke(bean);// 调用getter方法获取属性值                                }                            } catch (Exception ee) {                                LogEnrising.i("反射取值出错:" + field.getName());                            }                            ((EditText) child).setText(String.valueOf(arg));                            break;                        }                    }                } else if (child instanceof ViewGroup) {                    bind(child, bean);                }            }        } else {        }    }    // 把一个字符串的第一个字母大写、效率是最高的、    private static String getMethodName(String fildeName) throws Exception {        byte[] items = fildeName.getBytes();        items[0] = (byte) ((char) items[0] - 'a' + 'A');        return new String(items);    }}

这个方法是我参照别人写的东西做了相应改动,适合自己使用。

里面的控件命名规则我有说明,至于方法里面的实现方式我不再多说。

这个方法的弊端就是要扫描整个root(自己指定的View)的控件,但是使用很方便。

另外还有一点药注意,对于实体类的写法要注意。

更多相关文章

  1. Android-Module:ImageView常用XML属性
  2. Android布局之baselineAligned属性
  3. Android之ListView属性描述
  4. sencha touch 调用android主函数里的方法(可用与phoneGap开发第三
  5. Android控件显示和隐藏
  6. Android Shape属性(内含一个Button完整的xml定义)
  7. iphone开发之常用控件的使用详解

随机推荐

  1. android上传视频
  2. android执行Linux命令
  3. Android(安卓)4.0源码编译错误
  4. Android(安卓)监控网络状态
  5. Android(安卓)读写文件整理
  6. How to build Android(安卓)Windows SDK
  7. Android(安卓)沉浸式全屏(StatusBar,Navig
  8. Android(安卓)XUtils的cookie
  9. android 传感器
  10. android editText 输入字数限制