android使用Dialog实现复选功能与数据库结合综合实例

来源:互联网 发布:linux 定时重启服务器 编辑:程序博客网 时间:2024/06/06 06:34
本示例说明:

1.使用Dialog实现复选功能并与后台数据通过Id绑定.

2.实现显示时默认选中项控制.

3.实现修改后保存,根据id保存.

4.数据库处理使用AHibernate1.1,详见:http://blog.csdn.net/lk_blog/article/details/8201449

单选按钮实例见上篇博客:http://blog.csdn.net/lk_blog/article/details/8515347

本示例效果图:



主要代码:

dialog.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="修改班级[五期提高班]内学生信息" />    <Button        android:id="@+id/btnModify"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="修改" /></LinearLayout>
DialogActivity.java:
package com.tgb.lk.demo;import java.util.List;import com.tgb.lk.demo.R;import com.tgb.lk.demo.dao.impl.StudentDaoImpl;import com.tgb.lk.demo.model.Student;import com.tgb.lk.demo.util.CItem;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnMultiChoiceClickListener;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class DialogActivity extends Activity {private StudentDaoImpl stuDao;private Button btnModify;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dialog);btnModify = (Button) findViewById(R.id.btnModify);btnModify.setOnClickListener(listener);}private OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btnModify:stuDao = (stuDao == null ? new StudentDaoImpl(DialogActivity.this) : stuDao);//这个演示示例修改的班号为2的班级内学生,初始化数据中班号1没有自动生成主键,实际项目中可以根据查询的结果来传入id.List<CItem> list = stuDao.getCItemStudents(2);showDialog(list, 1);break;default:break;}}};public void toastShow(String text) {Toast.makeText(this, text, 1000).show();}//多选对话框public void showDialog(List<CItem> list, final int classesId) {int listSize = list.size();String[] ids = new String[listSize];// 所有id集合String[] values = new String[listSize]; // 所有name集合boolean[] flags = new boolean[listSize]; // 定义对象是否与实体建立了关联关系.// 初始化关联关系for (int j = 0; j < listSize; j++) {CItem item = list.get(j);ids[j] = item.getId();values[j] = item.getValue();flags[j] = item.getFlag();}// 定义复选框选项final String[] choiceItems = values;// 复选框默认值:false=未选;true=选中final boolean[] tempStatus = new boolean[flags.length];System.arraycopy(flags, 0, tempStatus, 0, flags.length);// 此处必须深复制final boolean[] sourceStatus = new boolean[flags.length];System.arraycopy(flags, 0, sourceStatus, 0, flags.length);// 此处必须深复制final List<CItem> tempList = list;// 创建对话框new AlertDialog.Builder(this).setTitle("请选择")// 设置对话框标题.setMultiChoiceItems(choiceItems, tempStatus,new OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which, boolean isChecked) {// 来回重复选择取消,得相应去改变item对应的bool值,点击确定时,根据这个bool[],得到选择的内容tempStatus[which] = isChecked;}}) // 设置对话框[肯定]按钮.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dealRel(tempList, sourceStatus, tempStatus, classesId);//更新数据}}).setNegativeButton("取消", null)// 设置对话框[否定]按钮.show();}// 更新数据,判断原来的关系和现在的关系,如果发生变化则更新public void dealRel(List<CItem> list, boolean[] sourceStatus,boolean[] targetStatus, int classesId) {stuDao = (stuDao == null ? new StudentDaoImpl(DialogActivity.this) : stuDao);for (int i = 0; i < targetStatus.length; i++) {if (sourceStatus[i] != targetStatus[i]) {Student student = stuDao.get(Integer.parseInt(list.get(i).getId()));if (targetStatus[i] == true) {student.setClassesId(classesId);//如果选中了则设置新班号.} else {student.setClassesId(0);//demo中处理时把没选中班号修改为了0.}stuDao.update(student);//调用AHibernate中的方法更新.}}toastShow("保存成功!");}}


其他代码:

ClassesDaoImpl.java:

package com.tgb.lk.demo.dao.impl;import java.util.ArrayList;import java.util.List;import java.util.Map;import android.content.Context;import com.tgb.lk.ahibernate.dao.impl.BaseDaoImpl;import com.tgb.lk.demo.model.Classes;import com.tgb.lk.demo.util.CItem;import com.tgb.lk.demo.util.DBHelper;//本文数据库处理引用jar包AHibernate1.1处理.//AHibernate的详细使用教程示例地址: http://blog.csdn.net/lk_blog/article/details/7455992//AHibernate源码交流地址: http://blog.csdn.net/lk_blog/article/details/7456125//AHibernate jar包下载及源代码下载地址: http://download.csdn.net/detail/lk_blog/4222048public class ClassesDaoImpl extends BaseDaoImpl<Classes> {public ClassesDaoImpl(Context context) {super(new DBHelper(context),Classes.class);}public void deleteAll() {super.execSql("delete from t_classes", null);}//查询所有班级保存到List<CItem>.public List<CItem> getCItemClasses(){String sql = "select _id,name from t_classes";List<Map<String, String>> list = super.query2MapList(sql, null);List<CItem> retList = new ArrayList<CItem>();for (Map<String, String> map : list) {CItem item= new CItem();item.setId(map.get("_id"));item.setValue(map.get("name"));retList.add(item);}return retList;}}

CItem.java:

package com.tgb.lk.demo.util;//处理单选和多选框的工具实体类public class CItem implements Cloneable{private String id = "";private String value = "";private boolean flag = false;//控制多选框默认是否选中状态.public CItem() {}public CItem(String _ID, String _Value) {id = _ID;value = _Value;}@Overridepublic String toString() {// 这个必须重写才能保证显示正常,因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()return value;}public String getId() {return id;}public String getValue() {return value;}public void setId(String id) {this.id = id;}public void setValue(String value) {this.value = value;}public boolean getFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}}

DBHelper.java:

package com.tgb.lk.demo.util;import com.tgb.lk.ahibernate.util.MyDBHelper;import com.tgb.lk.demo.model.Classes;import com.tgb.lk.demo.model.Student;import android.content.Context;public class DBHelper extends MyDBHelper {private static final String DBNAME = "school.db";// 数据库名private static final int DBVERSION = 1;private static final Class<?>[] clazz = { Student.class, Classes.class };// 要初始化的表public DBHelper(Context context) {super(context, DBNAME, null, DBVERSION, clazz);}}
Classes.java:

package com.tgb.lk.demo.model;import com.tgb.lk.ahibernate.annotation.Column;import com.tgb.lk.ahibernate.annotation.Id;import com.tgb.lk.ahibernate.annotation.Table;@Table(name = "t_classes")public class Classes {@Id@Column(name = "_id")private int id;@Column(name = "name")private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Classes [id=" + id + ", name=" + name + "]";}}
Student.java:

package com.tgb.lk.demo.model;import com.tgb.lk.ahibernate.annotation.Column;import com.tgb.lk.ahibernate.annotation.Id;import com.tgb.lk.ahibernate.annotation.Table;//自动生成的建表语句://CREATE TABLE t_student (id INTEGER primary key autoincrement, classes TEXT, teacher_id INTEGER, name TEXT(20))@Table(name = "t_student")public class Student {@Id@Column(name = "_id")private int id; // 主键,int类型,数据库建表时此字段会设为自增长@Column(name = "name", length = 20)private String name; // 名字长度一般不会超过20个字符吧,length=20数据字段的长度是20@Column(name = "classesid")private int classesId;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getClassesId() {return classesId;}public void setClassesId(int classesId) {this.classesId = classesId;}@Overridepublic String toString() {return "Student [classesId=" + classesId + ", id=" + id + ", name="+ name + "]";}}

源代码下载地址:http://download.csdn.net/detail/lk_blog/5005962
限于本人水平有限,很多地方写的并不完美,希望大家不吝赐教.如果觉得本文对您有帮助请顶支持一下,如果有不足之处欢迎留言交流,希望在和大家的交流中得到提高.


	
				
		
原创粉丝点击