1:几行代码搞定复杂页面代码赋值。
- 前提条件:xml 中生命的Id 名字需要跟后台的字段保持一致,或者加前缀例如:
- 后台 姓名字段 name 那么你Xml 中的姓名布局Id 也得为name 或加入前缀 ed_name;
2: 布局中的父容器要跟他命名一个Id,后面代码会用到 例如:
3: 代码: 在你的基类中可以写一下东西:
/***
* 反显获取字段
* @param view
* @param viewName
* @param <T>
* @return
*/
public <T extends View> T getViewByName(View view, String viewName) {
Resources res = this.getResources();
String package_name = this.getPackageName();
Log.i("Activity_ADD", "package_name:" + package_name);
int id = res.getIdentifier(viewName, "id", package_name);
Log.i("Activity_ADD", "id:" + id);
return view.findViewById(id);
}
/***
* view 为你的父容器的Id, object 为后台的数据源
* 反射赋值
*/
public void setData(View views,Object object) {
if (object!= null) { //新增
Field[] fields = object.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; ++i) {
Field field = fields[i];
field.setAccessible(true);
try {
String display = "" + field.get(object);//内容
String viewName = "ed_" + field.getName(); //布局字段ID ed为你的前//缀,如果没有写则不写
Log.i("Activity_ADD", "viewName:" + viewName + ";display:" + display);
View view = getViewByName(views, viewName);
Log.i("Activity_ADD", "view:" + view);
if (view instanceof TextView) {
((TextView) view).setText(display);
}
} catch (IllegalAccessException var9) {
CommLog.d(var9.getMessage());
}
}
}
}
4: 然后在你需要用的activity 或fragment 中 只需要 调用 setData 方法就可以了 例如: