实现的整体思路:
1.处理 400张表的数据
将400张表的字段存到一张表里面,整理这400张表的数据是个比较大的工作,我们有个做delphi的工程师专门做了一个配置工具,打开每张表配置这张表格的字段。
数据库主要包括4张表格:T_Table 存储所有表格数据 T_TableDetail 存储所有表的字段数据 T_Type 字典表 存储所有控件类型 T_DIC存储所有表下拉数据
T_Table 字段包括:id name order parentID(因为我们这个表显示有层级结构)
T_TableDetail字段主要包括 :字段id 字段名称 字段顺序 表格id(属于哪张表) 类型id(这个字段要用什么控件显示) isRequired 是否必填 defaultValue默认值
row col 行列 dicid关联字典表数据
核心的就这些 这个根据自己的具体业务再搭建自己的数据库表结构。
2.搭建界面
有了基础数据后,我们要做的就是写一个通用Activity去动态拼装整个界面
我实现的思路是这样的 :将每种类型的控件都单独写成xml,比如有15种类型的控件就写15个xml,根据字段类型判断加载哪种类型的xml。
判断加载完界面 处理界面控件设置默认值,设置点击事件,设置是否可以编辑点击等(因为查看 修改 添加都用一套界面),这一些基本逻辑。
我就直接将初始化布局的地方贴出来,大家看一下。
public class ViewTypeUtil {
//表格名称类型 输入框 默认带值 且要单独获取值
public static final int item_view_type_zero = 0;
//单行输入框
public static final int item_view_type_one = 1;
//多行输入框
public static final int item_view_type_two = 2;
//短日期 如2012-01-12
public static final int item_view_type_three = 3;
//数值
public static final int item_view_type_four = 4;
//下拉框
public static final int item_view_type_five = 5;
//分部分项
public static final int item_view_type_six = 6;
//部位栏
public static final int item_view_type_seven = 7;
//单选框
public static final int item_view_type_eight = 8;
//多选框
public static final int item_view_type_nine= 9;
//列表
public static final int item_view_type_ten = 10;
//图纸标准
public static final int item_view_type_eleven = 11;
//图片
public static final int item_view_type_twelve = 12;
//组
public static final int item_view_type_thirteen = 13;
//长日期 2017-07-02 10:38:41
public static final int item_view_type_fourteen = 14;
//时间格式 如 10:25:14
public static final int item_view_type_fifteen = 15;
//标签
public static final int item_view_type_sixteen = 16;
}
public void initView(final LinearLayout linearLayout, List formDetailList) {
for (int i = 0; i < formDetailList.size(); i++) {
final FormDetail formDetail = formDetailList.get(i);
final int mType = formDetail.getTypeId();
if (mType == ViewTypeUtil.item_view_type_zero) {
mTypeZeroView = LayoutInflater.from(this).inflate(R.layout.item_type_zero, null);
mItemZeroFieldTv = (TextView) mTypeZeroView.findViewById(R.id.item_zero_field_tv);
mItemZeroValueEt = (EditText) mTypeZeroView.findViewById(R.id.item_zero_value_et);
if (mIntentFrom == FLAG_SHOW) {
mItemZeroValueEt.setEnabled(false);
}
mItemZeroValueEt.setText(formDetail.getuValue());
mItemZeroValueEt.setTag(formDetail.getTableDetailID());
mItemZeroFieldTv.setText(formDetail.getCaption());
mTypeZeroView.setTag(mType);
linearLayout.addView(mTypeZeroView);
} else if (mType == ViewTypeUtil.item_view_type_one) {
mTypeOneView = LayoutInflater.from(this).inflate(R.layout.item_type_one, null);
mItemOneFieldTv = (TextView) mTypeOneView.findViewById(R.id.item_one_field_tv);
mItemOneValueEt = (EditText) mTypeOneView.findViewById(R.id.item_one_value_et);
if (mIntentFrom == FLAG_SHOW) {
mItemOneValueEt.setEnabled(false);
}
mItemOneValueEt.setText(formDetail.getuValue());
mItemOneValueEt.setTag(formDetail.getTableDetailID());
mItemOneFieldTv.setText(formDetail.getCaption());
mTypeOneView.setTag(mType);
linearLayout.addView(mTypeOneView);
} else if (mType == ViewTypeUtil.item_view_type_two) {
mTypeTwoView = LayoutInflater.from(this).inflate(R.layout.item_type_two, null);
mItemTwoValueEt = (EditText) mTypeTwoView.findViewById(R.id.content_et);
mItemTwoValueEt.setTypeface(Constants.fontFace);
mItemTwoFieldTv = (TextView) mTypeTwoView.findViewById(R.id.item_two_field_tv);
if (mIntentFrom == FLAG_SHOW) {
mItemTwoValueEt.setEnabled(false);
} else {
mTypeTwoView.findViewById(R.id.content_iv).setOnClickListener(this);
mTypeTwoView.findViewById(R.id.voice_iv).setOnClickListener(this);
mTypeTwoView.findViewById(R.id.special_iv).setOnClickListener(this);
}
mItemTwoValueEt.setText(formDetail.getuValue());
mItemTwoFieldTv.setText(formDetail.getCaption());
mItemTwoValueEt.setTag(formDetail.getTableDetailID());
mTypeTwoView.findViewById(R.id.voice_iv).setTag(formDetail.getTableDetailID());
mTypeTwoView.findViewById(R.id.special_iv).setTag(formDetail.getTableDetailID());
mTypeTwoView.findViewById(R.id.content_iv).setTag(formDetail.getTableDetailID());
mTypeTwoView.setTag(mType);
linearLayout.addView(mTypeTwoView);
} else if (mType == ViewTypeUtil.item_view_type_three) {
mTypeThreeView = LayoutInflater.from(this).inflate(R.layout.item_type_three, null);
mDateKeyTv = (TextView) mTypeThreeView.findViewById(R.id.tv_test_date_key);
mDateValueEt = (EditText) mTypeThreeView.findViewById(R.id.et_test_date_value);
mDateKeyTv.setText(formDetail.getCaption());
if (mIntentFrom == FLAG_SHOW) {
mDateValueEt.setEnabled(false);
} else {
mDateValueEt.setOnClickListener(this);
}
if (!TextUtils.isEmpty(formDetail.getuValue())) {
mDateValueEt.setText(formDetail.getuValue());
} else {
mDateValueEt.setText(TimeUtil.getCurDateStr().substring(0, 12));
}
mDateValueEt.setTag(formDetail.getTableDetailID());
mTypeThreeView.setTag(mType);
linearLayout.addView(mTypeThreeView);
} else if (mType == ViewTypeUtil.item_view_type_four) {
mTypeFourView = LayoutInflater.from(context).inflate(R.layout.item_type_four, null);
mNumEt = (EditText) mTypeFourView.findViewById(R.id.et_num);
<