package tgb.lk.tablelayout;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
/**
* 实现功能:
* 1.使用TableLayout动态布局展示,可动态添加和删除.
* 2.初始化时显示动态展示,初始化的数据改造后可来自数据库.
* 3.重置时到初始化状态.
* 4.保存时去重检查,参见代码中去重算法.
*
* @author likun date: 2012-04-07
*/
public class MainActivity extends Activity {
private Button btnAdd = null;
private Button btnOK = null;
private Button btnReset = null;
private Button btnCancel = null;
private EditText nameET = null;
private int entity_id = 0;
private String entity_name = "";
private DictDaoImpl dao = null;
private TableLayout table = null;
private int orders = 0; // 用户记录最大的orders值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dict_item);
// 实例化按钮并设置监听器.
btnAdd = (Button) findViewById(R.id.btnAdd);
btnOK = (Button) findViewById(R.id.btnOK);
btnReset = (Button) findViewById(R.id.btnReset);
btnCancel = (Button) findViewById(R.id.btnCancel);
btnAdd.setOnClickListener(listener);
btnOK.setOnClickListener(listener);
btnReset.setOnClickListener(listener);
btnCancel.setOnClickListener(listener);
// 实例化EditText
nameET = (EditText) findViewById(R.id.name);
// Intent intent = getIntent();
entity_id = 1; // intent.getIntExtra(CrmConstances.ID, 0);
entity_name = "区域";// intent.getStringExtra(CrmConstances.NAME);
nameET.setText(entity_name);
table = (TableLayout) findViewById(R.id.dictTable);
initDictItemTable();
}
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnAdd:
appendNewRow(table);
break;
case R.id.btnOK:
// 组名称不能为空.
if (TextUtils.isEmpty(nameET.getText().toString().trim())) {
toastShow("名称不能为空,操作失败!");
nameET.requestFocus(); // 设定焦点
break;
}
if (dao == null) {
dao = new DictDaoImpl(MainActivity.this);
}
String entityNameET = nameET.getText().toString().trim();
if (entity_id != 0) {
Dict entity = dao.get(entity_id);
// 组名发生改变时,判断组名称是否重复
if (!entity.getName().equals(entityNameET)) {
if (dao.isExist()) {
toastShow("名称[" + entityNameET + "]重复,操作失败!");
nameET.selectAll();
nameET.requestFocus();
break;
}
entity.setName(entityNameET);
dao.update(entity);
}
Map<String, Dict> dictMap = new HashMap<String, Dict>();
List<Dict> dictAddList = new ArrayList<Dict>();
List<Dict> dictUpdateList = new ArrayList<Dict>();
List<Dict> dictDeleteList = new ArrayList<Dict>();
Map<String, String> map = new HashMap<String, String>();
// 从界面得到业务字典对象
for (int i = 1; i < table.getChildCount(); i++) {
// 得到TableRow对象
TableRow row = (TableRow) table.getChildAt(i);
String dictId = ((TextView) row.getChildAt(0))
.getText().toString();
String dictOrders = ((EditText) row.getChildAt(1))
.getText().toString();
String dictName = ((EditText) row.getChildAt(2))
.getText().toString();
// 构建Dict对象
Dict dict = new Dict();
if (!TextUtils.isEmpty(dictName)) {
dict.setName(dictName);
// 检查名称是否重复.
if (map.containsKey(dictName)) {
toastShow("名称重复,请检查,保存失败!");
return;
}
map.put(dictName, dictName);
if (!TextUtils.isEmpty(dictOrders)) {
dict.setOrders(Integer.parseInt(dictOrders));
} else {
dict.setOrders(orders);
}
if (!TextUtils.isEmpty(dictId)) {
dict.setId(Integer.parseInt(dictId));
dictMap.put(dictId, dict);
} else {
dict.setId(0);
dict.setTypes(1);
dictAddList.add(dict);
}
} else {
toastShow("名称不能为空,保存失败!");
return;
}
}
if (dao == null) {
dao = new DictDaoImpl(MainActivity.this);
}
// 在数据库中取出Dict对象
List<Dict> list = new ArrayList<Dict>();
if (entity_id != 0) {
list = dao.getDictItem(String.valueOf(entity_id));
}
// 比较数据库中取出的对象和界面上构造的对象,找出那些需要修改那些需要删除那些需要添加
for (Dict dict : list) {
String dict_id = String.valueOf(dict.getId());
if (dictMap.containsKey(dict_id)) {
Dict temp = dictMap.get(dict_id);
if (!dict.getName().equals(temp.getName())
|| dict.getOrders() != temp.getOrders()) {
dict.setName(temp.getName());
dict.setOrders(temp.getOrders());
dictUpdateList.add(dict);
}
} else {
dictDeleteList.add(dict);
}
}
// 添加对象并建立关系
for (Dict dict : dictAddList) {
// 插入对象
Long itemId = dao.insert(dict);
// 建立关系...
// ....
}
// 修改业务字典对象
for (Dict dict : dictUpdateList) {
dao.update(dict);
}
// 删除不存在的业务字典
Integer[] ids = new Integer[dictDeleteList.size()];
for (int j = 0; j < dictDeleteList.size(); j++) {
Dict dict2 = dictDeleteList.get(j);
ids[j] = dict2.getId();
}
dao.delete(ids);
toastShow("修改[" + entityNameET + "]成功!");
}
// setResult(1);
// MainActivity.this.finish();
break;
case R.id.btnReset:
// 若为添加则重置为空,若为修改则重置为打开前的数据.
nameET.setText(entity_name);
initDictItemTable();
toastShow("重置成功,请重新输入");
// setResult(CrmConstances.RESULT_FAILURE);
break;
case R.id.btnCancel:
// setResult(CrmConstances.RESULT_FAILURE);
MainActivity.this.finish(); // 结束自己,即回到打开之前的Activity.
toastShow("关闭");
break;
default:
break;
}
}
};
public void toastShow(String text) {
Toast.makeText(this, text, 1000).show();
}
private void appendNewRow(final TableLayout table) {
TableRow row = new TableRow(this);
row.setId(0);
orders++;
TextView dictItemId = new TextView(this);
dictItemId.setText("");
dictItemId.setVisibility(View.GONE);
EditText order = new EditText(this);
order.setText(String.valueOf(orders));
order.setPadding(3, 3, 3, 3);
order.setWidth(40);
order.setGravity(Gravity.CENTER);
EditText dictName = new EditText(this);
dictName.setText("");
dictName.setHint("请输入业务字典名称");
dictName.setPadding(3, 3, 3, 3);
dictName.setWidth(190);
dictName.setGravity(Gravity.CENTER);
Button oper = new Button(this);
oper.setText(" 删除 ");
oper.setPadding(3, 3, 3, 3);
order.setWidth(60);
oper.setGravity(Gravity.CENTER);
oper.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
table.removeView(table.findViewById(0));
}
});
row.addView(dictItemId);
row.addView(order);
row.addView(dictName);
row.addView(oper);
table.addView(row);
// LinearLayout linear = (LinearLayout) findViewById(R.id.dictLayout);
// ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) linear
// .getLayoutParams();
// params.height = LayoutParams.WRAP_CONTENT;
// params.width = LayoutParams.FILL_PARENT;
// linear.setLayoutParams(params);
}
public void initDictItemTable() {
if (dao == null) {
dao = new DictDaoImpl(this);
}
List<Dict> list = new ArrayList<Dict>();
if (entity_id != 0) {
list = dao.getDictItem(String.valueOf(entity_id));
}
table.removeAllViews();
TableRow row1 = new Tab
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
android动态添加表格行-IT计算机-毕业设计.zip (32个子文件)
android动态添加表格行
TableLayoutDemo
bin
classes.dex 13KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
drawable-mdpi
ic_launcher.png 2KB
classes
tgb
lk
tablelayout
MainActivity.class 6KB
MainActivity$3.class 1KB
MainActivity$2.class 1000B
MainActivity$1.class 6KB
DictDaoImpl.class 2KB
R$layout.class 427B
R$id.class 602B
R$drawable.class 407B
R$attr.class 340B
R.class 531B
R$string.class 427B
Dict.class 2KB
resources.ap_ 12KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
values
strings.xml 185B
drawable-mdpi
ic_launcher.png 3KB
layout
main.xml 398B
dict_item.xml 4KB
gen
tgb
lk
tablelayout
R.java 1KB
proguard.cfg 1KB
src
tgb
lk
tablelayout
DictDaoImpl.java 1002B
MainActivity.java 10KB
Dict.java 856B
.project 851B
.classpath 364B
project.properties 360B
AndroidManifest.xml 735B
共 32 条
- 1
资源评论
芝麻粒儿
- 粉丝: 6w+
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功