转载https://blog.csdn.net/sinat_34608734/article/details/74136271?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
利用ListView和数据库做一个学员信息管理系统。下面把做的代码复制下来,供大家参考。
首页的布局main.xml
复制代码
?
创建一个StudentListActivity做为主页显示学员信息以及进行一些操作。
复制代码
package cn.yj3g.student.activity;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import cn.yj3g.student.dao.StudentDao;
import cn.yj3g.student.db.StudentDBHelper;
import cn.yj3g.student.entry.Student;
import cn.yj3g.student.entry.TableContanst;
public class StudentListActivity extends ListActivity implements
OnClickListener, OnItemClickListener, OnItemLongClickListener {
private static final String TAG = "TestSQLite";
private Button addStudent;
private Cursor cursor;
private SimpleCursorAdapter adapter;
private ListView listView;
private List list;
private RelativeLayout relativeLayout;
private Button searchButton;
private Button selectButton;
private Button deleteButton;
private Button selectAllButton;
private Button canleButton;
private LinearLayout layout;
private StudentDao dao;
private Student student;
private Boolean isDeleteList = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "onCreate");
list = new ArrayList();
student = new Student();
dao = new StudentDao(new StudentDBHelper(this));
addStudent = (Button) findViewById(R.id.btn_add_student);
searchButton = (Button) findViewById(R.id.bn_search_id);
selectButton = (Button) findViewById(R.id.bn_select);
deleteButton = (Button) findViewById(R.id.bn_delete);
selectAllButton = (Button) findViewById(R.id.bn_selectall);
canleButton = (Button) findViewById(R.id.bn_canel);
layout = (LinearLayout) findViewById(R.id.showLiner);
relativeLayout=(RelativeLayout) findViewById(R.id.RelativeLayout);
listView = getListView();
// 为按键设置监听
addStudent.setOnClickListener(this);
searchButton.setOnClickListener(this);
selectButton.setOnClickListener(this);
deleteButton.setOnClickListener(this);
canleButton.setOnClickListener(this);
selectAllButton.setOnClickListener(this);
listView.setOnItemClickListener(this);
listView.setOnItemLongClickListener(this);
listView.setOnCreateContextMenuListener(this);
}
@Override
protected void onStart() {
// 调用load()方法将数据库中的所有记录显示在当前页面
super.onStart();
load();
}
public void onClick(View v) {
// 跳转到添加信息的界面
if (v == addStudent) {
startActivity(new Intent(this, AddStudentActivity.class));
} else if (v == searchButton) {
// 跳转到查询界面
startActivity(new Intent(this, StudentSearch.class));
} else if (v == selectButton) {
// 跳转到选择界面
isDeleteList = !isDeleteList;
if (isDeleteList) {
checkOrClearAllCheckboxs(true);
} else {
showOrHiddenCheckBoxs(false);
}
} else if (v == deleteButton) {
// 删除数据
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
long id = list.get(i);
Log.e(TAG, "delete id=" + id);
int count = dao.deleteStudentById(id);
}
dao.closeDB();
load();
}
} else if (v == canleButton) {
// 点击取消,回到初始界面
load();
layout.setVisibility(View.GONE);
isDeleteList = !isDeleteList;
} else if (v == selectAllButton) {
// 全选,如果当前全选按钮显示是全选,则在点击后变为取消全选,如果当前为取消全选,则在点击后变为全选
selectAllMethods();
}
}
// 创建菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.menu, menu);
}
// 对菜单中的按钮添加响应时间
@Override
public boolean onContextItemSelected(MenuItem item) {
int item_id = item.getItemId();
student = (Student) listView.getTag();
Log.v(TAG, "TestSQLite++++student+" + listView.getTag() + "");
final long student_id = student.getId();
Intent intent = new Intent();
// Log.v(TAG, "TestSQLite+++++++id"+student_id);
switch (item_id) {
// 添加
case R.id.add:
startActivity(new Intent(this, AddStudentActivity.class));
break;
// 删除
case R.id.delete:
deleteStudentInformation(student_id);
break;
case R.id.look:
// 查看学生信息
// Log.v(TAG, "TestSQLite+++++++look"+student+"");
intent.putExtra("student", student);
intent.setClass(this, ShowStudentActivity.class);
this.startActivity(intent);
break;
case R.id.write:
// 修改学生信息
intent.putExtra("student", student);
intent.setClass(this, AddStudentActivity.class);
this.startActivity(intent);
break;
default:
break;
}
return super.onContextItemSelected(item);
}
// 创建一个按钮菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(1, 1, 1, "按入学日期排序");
menu.add(1, 2, 1, "按姓名进行排序");
menu.add(1, 5, 1, "按学号进行排序");
menu.add(1, 3, 1, "模糊查找");
menu.add(1, 4, 1, "退出");
return super.onCreateOptionsMenu(menu);
}
// 对菜单中的按钮添加响应时间
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
// 排序
case 1:
cursor = dao.sortByTrainDate();
load(cursor);
break;
// 排序
case 2:
cursor = dao.sortByName();
load(cursor);
break;
// 查找
case 3:
startActivity(new Intent(this, StudentSearch.class));
break;
// 退出
case 4:
finish();
break;
case 5:
cursor = dao.sortByID();
load(cursor);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
// 长点击一条记录触发的时间
@Override
public boolean onItemLongClick(AdapterView> parent, View view,
int position, long id) {
Student student = (Student) dao.getStudentFromView(view, id);
listView.setTag(student);
return false;
}
// 点击一条记录是触发的事件
@Override
public void onItemClick(AdapterView> parent, View view, int position,
long id) {
if (!isDeleteList) {
student = dao.getStudentFromView(view, id);
// Log.e(TAG, "student*****" + dao.getStudentFromView(view, id));
Intent intent = new Intent();
intent.putExtra("student", student);
intent.setClass(this, ShowStudentActivity.class);
this.startActivity(intent);
} else {
CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
box.setChecked(!box.isChecked());
list.add(id);
deleteButton.setEnabled(box.isChecked());
}
}
// 自定义一个加载数据库中的全部记录到当前页面的无参方法
public void load() {
StudentDBHelper studentDBHelper = new StudentDBHelper(
StudentListActivity.this);
SQLiteDatabase database = studentDBHelper.getWritableDatabase();
cursor = database.query(TableContanst.STUDENT_TABLE, null, null, null,
null, null, TableContanst.StudentColumns.MODIFY_TIME + " desc");
startManagingCursor(cursor);
adapter = new SimpleCursorAdapter(this, R.layout.student_list_item,
cursor, new String[] { TableContanst.StudentColumns.ID,
TableContanst.StudentColumns.NAME,
TableContanst.StudentColumns.AGE,
TableContanst.StudentColumns.SEX,
TableContanst.StudentColumns.LIKES,
TableContanst.StudentColumns.PHONE_NUMBER,
TableContanst.StudentColumns.TRAIN_DATE }, new int[] {
R.id.tv_stu_id, R.id.tv_stu_name, R.id.tv_stu_age,
R.id.tv_stu_sex, R.id.tv_stu_likes, R.id.tv_stu_phone,
R.id.tv_stu_traindate });
listView.setAdapter(adapter);
}
// 自定义一个加载数据库中的全部记录到当前页面的有参方法
public void load(Cursor cursor) {
adapter = new SimpleCursorAdapter(this, R.layout.student_list_item,
cursor, new String[] { TableContanst.StudentColumns.ID,
TableContanst.StudentColumns.NAME,
TableContanst.StudentColumns.AGE,
TableContanst.StudentColumns.SEX,
TableContanst.StudentColumns.LIKES,
TableContanst.StudentColumns.PHONE_NUMBER,
TableContanst.StudentColumns.TRAIN_DATE }, new int[] {
R.id.tv_stu_id, R.id.tv_stu_name, R.id.tv_stu_age,
R.id.tv_stu_sex, R.id.tv_stu_likes, R.id.tv_stu_phone,
R.id.tv_stu_traindate });
listView.setAdapter(adapter);
}
// 全选或者取消全选
private void checkOrClearAllCheckboxs(boolean b) {
int childCount = listView.getChildCount();
// Log.e(TAG, "list child size=" + childCount);
for (int i = 0; i < childCount; i++) {
View view = listView.getChildAt(i);
if (view != null) {
CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
box.setChecked(!b);
}
}
showOrHiddenCheckBoxs(true);
}
// 显示或者隐藏自定义菜单
private void showOrHiddenCheckBoxs(boolean b) {
int childCount = listView.getChildCount();
// Log.e(TAG, "list child size=" + childCount);
for (int i = 0; i < childCount; i++) {
View view = listView.getChildAt(i);
if (view != null) {
CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
int visible = b ? View.VISIBLE : View.GONE;
box.setVisibility(visible);
layout.setVisibility(visible);
deleteButton.setEnabled(false);
}
}
}
// 自定义一个利用对话框形式进行数据的删除
private void deleteStudentInformation(final long delete_id) {
// 利用对话框的形式删除数据
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("学员信息删除")
.setMessage("确定删除所选记录?")
.setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
int raws = dao.deleteStudentById(delete_id);
layout.setVisibility(View.GONE);
isDeleteList = !isDeleteList;
load();
if (raws > 0) {
Toast.makeText(StudentListActivity.this, "删除成功!",
Toast.LENGTH_LONG).show();
} else
Toast.makeText(StudentListActivity.this, "删除失败!",
Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 点击全选事件时所触发的响应
private void selectAllMethods() {
// 全选,如果当前全选按钮显示是全选,则在点击后变为取消全选,如果当前为取消全选,则在点击后变为全选
if (selectAllButton.getText().toString().equals("全选")) {
int childCount = listView.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = listView.getChildAt(i);
if (view != null) {
CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
box.setChecked(true);
deleteButton.setEnabled(true);
selectAllButton.setText("取消全选");
}
}
} else if (selectAllButton.getText().toString().equals("取消全选")) {
checkOrClearAllCheckboxs(true);
deleteButton.setEnabled(false);
selectAllButton.setText("全选");
}
}
}
复制代码
menu.xml文件
复制代码
1
删除界面:
在点击ListView中的一条Item时,老师要求显示出这个学生的详细信息,所以需要一个xml文件来显示这个信息。在这里我创建了一个student_info.xml文件
复制代码
1
2
4 android:layout_width=“fill_parent”
5 android:layout_height=“fill_parent”
6 android:padding=“5dip”
7 >
8
10 android:layout_height=“40dip”
11 android:layout_marginRight=“5dip”
12 android:layout_marginTop=“5dip”
13 android:layout_marginBottom=“5dip”
14 android:textSize=“16sp”
15 android:gravity=“left|center_vertical”
16 android:text=“学员ID:”
17 />
18
19
21 android:layout_height=“40dip”
22 android:layout_toRightOf="@id/id2_text_id"
23 android:layout_alignParentRight=“true”
24 android:layout_alignTop="@id/id2_text_id"
25 android:gravity=“left|center_vertical”
26 />
27
28
30 android:layout_height=“40dip”
31 android:layout_marginRight=“5dip”
32 android:layout_marginTop=“5dip”
33 android:layout_marginBottom=“5dip”
34 android:layout_below="@id/id2_text_id"
35 android:layout_alignLeft="@id/id2_text_id"
36 android:textSize=“16sp”
37 android:gravity=“left|center_vertical”
38 android:text=“姓名:”
39 />
40
41
43 android:layout_height=“40dip”
44 android:layout_toRightOf="@id/name2_text_id"
45 android:layout_alignParentRight=“true”
46 android:layout_alignTop="@id/name2_text_id"
47 android:gravity=“left|center_vertical”
48 />
49
50
52 android:layout_height=“40dip”
53 android:gravity=“left|center_vertical”
54 android:layout_marginRight=“5dip”
55 android:layout_below="@id/name2_text_id"
56 android:layout_marginBottom=“5dip”
57 android:textSize=“16sp”
58 android:text=“年龄:”
59 />
60
61
63 android:layout_height=“40dip”
64 android:layout_toRightOf="@id/age2_text_id"
65 android:layout_alignParentRight=“true”
66 android:layout_alignTop="@id/age2_text_id"
67 android:gravity=“left|center_vertical”
68 />
69
70
72 android:layout_height=“40dip”
73 android:gravity=“left|center_vertical”
74 android:layout_below="@id/age2_text_id"
75 android:layout_alignLeft="@id/age2_text_id"
76 android:layout_marginRight=“5dip”
77 android:layout_marginBottom=“5dip”
78 android:text=“性别:”
79 android:textSize=“16sp”
80 />
81
82
84 android:layout_width=“fill_parent”
85 android:layout_height=“40dip”
86 android:layout_toRightOf="@id/sex2_text_id"
87 android:layout_alignParentRight=“true”
88 android:layout_alignTop="@id/sex2_text_id"
89 android:gravity=“left|center_vertical”
90 />
91
92
94 android:layout_height=“40dip”
95 android:gravity=“left|center_vertical”
96 android:layout_below="@id/sex2_text_id"
97 android:layout_alignLeft="@id/sex2_text_id"
98 android:layout_marginRight=“5dip”
99 android:layout_marginBottom=“5dip”
100 android:text=“爱好:”
101 android:textSize=“16sp”
102 />
103
105 android:layout_width=“wrap_content”
106 android:layout_toRightOf="@id/like2_text_id"
107 android:layout_below="@id/sex2_text_id"
108 android:layout_marginRight=“52dip”
109 android:gravity=“left|center_vertical”/>
110
111
113 android:layout_height=“40dip”
114 android:gravity=“center_vertical|left”
115 android:layout_marginRight=“5dip”
116 android:layout_below="@id/like2_text_id"
117 android:layout_marginBottom=“5dip”
118 android:textSize=“16sp”
119 android:text=“联系电话:”
120 />
121
122
124 android:layout_height=“40dip”
125 android:layout_toRightOf="@id/contact2_text_id"
126 android:layout_alignParentRight=“true”
127 android:layout_alignTop="@id/contact2_text_id"
128 android:gravity=“center_vertical|left”
129 />
130
131
133 android:layout_height=“40dip”
134 android:gravity=“center_vertical|left”
135 android:layout_marginRight=“5dip”
136 android:layout_below="@id/contact2_text_id"
137 android:layout_marginBottom=“5dip”
138 android:textSize=“16sp”
139 android:text=“入学日期”
140 />
141
142
144 android:layout_height=“40dip”
145 android:layout_toRightOf="@id/train2_time_text_id"
146 android:layout_alignParentRight=“true”
147 android:layout_alignTop="@id/train2_time_text_id"
148 android:gravity=“center_vertical|left”
149 />
150
151
复制代码
1 package cn.yj3g.student.activity;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.view.View;
7 import android.widget.TextView;
8 import cn.yj3g.student.entry.Student;
9 import cn.yj3g.student.entry.TableContanst;
10
11 public class ShowStudentActivity extends Activity {
12
13 @Override
14 public void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.student_info);
17 Intent intent = getIntent();
18 Student student = (Student) intent.getSerializableExtra(TableContanst.STUDENT_TABLE);
19 ((TextView)findViewById(R.id.tv_info_id)).setText(student.getId()+"");
20 ((TextView)findViewById(R.id.tv_info_name)).setText(student.getName());
21 ((TextView)findViewById(R.id.tv_info_age)).setText(student.getAge()+"");
22 ((TextView)findViewById(R.id.tv_info_sex)).setText(student.getSex());
23 ((TextView)findViewById(R.id.tv_info_likes)).setText(student.getLike());
24 ((TextView)findViewById(R.id.tv_info_train_date)).setText(student.getTrainDate());
25 ((TextView)findViewById(R.id.tv_info_phone)).setText(student.getPhoneNumber());
26 }
27
28 public void goBack(View view) {
29 finish();
30 }
31 }
复制代码
界面效果如下:
最最重要的环节来了,我们做这个系统主要是为了管理学员,所以增加和修改学员信息是必不可少的,因此需要一个Activity来专门提供添加和修改学员信息。在这里还有一件重要的事情要做,那就是要设计添加和修改学员的界面,在这里可用用相对布局做比较简单。我在这里创建了一个AddStudentActivity来添加和修改学员信息,下面附上相关代码:
add_student.xml
复制代码
1
2
3
5 android:layout_height=“fill_parent”
6 android:fillViewport=“true”
7 android:scrollbarStyle=“outsideInset” >
8
10 android:layout_width=“fill_parent”
11 android:layout_height=“fill_parent”
12 android:padding=“5dip”
13 >
14
15
17 android:layout_height=“40dip”
18 android:gravity=“center_vertical|right”
19 android:layout_marginRight=“5dip”
20 android:layout_marginTop=“5dip”
21 android:layout_marginBottom=“5dip”
22 android:textSize=“16sp”
23 android:text=“学员ID:”
24 />
25
26
28 android:layout_height=“40dip”
29 android:text=“未分配ID”
30 android:layout_toRightOf="@id/tv_stu_text_id"
31 android:layout_alignParentRight=“true”
32 android:layout_alignTop="@id/tv_stu_text_id"
33 android:gravity=“center”
34 android:background="#ffffff"
35 android:textColor="#000000"
36 android:textSize=“16sp”
37 />
38
39
41 android:layout_height=“40dip”
42 android:gravity=“center_vertical|right”
43 android:layout_marginRight=“5dip”
44 android:layout_below="@id/tv_stu_text_id"
45 android:layout_alignLeft="@id/tv_stu_text_id"
46 android:layout_marginBottom=“5dip”
47 android:textSize=“16sp”
48 android:text=“姓名:”
49 />
50
51
53 android:layout_height=“40dip”
54 android:layout_toRightOf="@id/tv_name_text"
55 android:layout_alignParentRight=“true”
56 android:layout_alignTop="@id/tv_name_text"
57 android:hint=“请输入姓名”
58 android:inputType=“textPersonName”
59 android:paddingLeft=“20dip”/>
60
61
63 android:layout_height=“40dip”
64 android:gravity=“center_vertical|right”
65 android:layout_marginRight=“5dip”
66 android:layout_below="@id/tv_name_text"
67 android:layout_marginBottom=“5dip”
68 android:textSize=“16sp”
69 android:text=“年龄:”
70 />
71
72
74 android:layout_height=“40dip”
75 android:layout_toRightOf="@id/tv_age_text"
76 android:layout_alignParentRight=“true”
77 android:layout_alignTop="@id/tv_age_text"
78 android:hint=“请输入年龄”
79 android:paddingLeft=“20dip”
80 android:maxLength=“3”
81 android:inputType=“number”
82 />
83
84
86 android:layout_height=“40dip”
87 android:gravity=“center_vertical|right”
88 android:layout_below="@id/tv_age_text"
89 android:layout_alignLeft="@id/tv_age_text"
90 android:layout_marginRight=“5dip”
91 android:layout_marginBottom=“5dip”
92 android:text=“性别:”
93 android:textSize=“16sp”
94 />
95
96
98 android:layout_width=“fill_parent”
99 android:layout_height=“40dip”
100 android:orientation=“horizontal”
101 android:layout_toRightOf="@id/tv_sex_text"
102 android:layout_alignParentRight=“true”
103 android:layout_alignTop="@id/tv_sex_text"
104 >
105
107 android:layout_width=“wrap_content”
108 android:layout_height=“wrap_content”
109 android:layout_weight=“1”
110 android:text=“男”
111 android:textSize=“16sp”
112 />
113
115 android:text=“女”
116 android:id="@+id/rb_sex_female"
117 android:layout_weight=“1”
118 android:textSize=“16sp”>
119
120
121
122
124 android:layout_height=“40dip”
125 android:gravity=“center_vertical|right”
126 android:layout_below="@id/rg_sex"
127 android:layout_alignLeft="@id/tv_sex_text"
128 android:layout_marginRight=“5dip”
129 android:layout_marginBottom=“5dip”
130 android:text=“爱好:”
131 android:textSize=“16sp”
132 />
133
135 android:layout_width=“wrap_content” android:layout_height=“wrap_content”
136 android:layout_toRightOf="@id/tv_likes_text"
137 android:layout_below="@+id/rg_sex"
138 android:layout_alignLeft="@+id/group1"
139 android:text="@string/box1"
140 >
141
143 android:layout_width=“wrap_content” android:layout_height=“wrap_content”
144 android:layout_toRightOf="@+id/box1"
145 android:layout_below="@+id/rg_sex"
146 android:layout_alignTop="@+id/box1"
147 android:text="@string/box2"
148 >
149
151 android:layout_width=“wrap_content” android:layout_height=“wrap_content”
152 android:layout_toRightOf="@+id/box2"
153 android:layout_below="@+id/rg_sex"
154 android:layout_alignTop="@+id/box2"
155 android:text="@string/box3"
156 >
157
158
160 android:layout_height=“40dip”
161 android:gravity=“center_vertical|right”
162 android:layout_marginRight=“5dip”
163 android:layout_below="@id/tv_likes_text"
164 android:layout_marginBottom=“5dip”
165 android:textSize=“16sp”
166 android:text=“联系电话:”
167 />
168
169
171 android:layout_height=“40dip”
172 android:layout_toRightOf="@id/tv_phone_text"
173 android:layout_alignParentRight=“true”
174 android:layout_alignTop="@id/tv_phone_text"
175 android:hint=“请输入手机号”
176 android:paddingLeft=“20dip”
177 android:inputType=“phone”
178 android:maxLength=“11”
179 />
180
181
183 android:layout_height=“40dip”
184 android:gravity=“center_vertical|right”
185 android:layout_marginRight=“5dip”
186 android:layout_below="@id/tv_phone_text"
187 android:layout_marginBottom=“5dip”
188 android:textSize=“16sp”
189 android:text=“入学日期”
190
191 />
192
193
195 android:layout_height=“40dip”
196 android:layout_toRightOf="@id/tv_traindate_text"
197 android:layout_alignParentRight=“true”
198 android:layout_alignTop="@id/tv_traindate_text"
199 android:hint=“点击选择日期”
200 android:inputType=“date”
201 android:paddingLeft=“20dip”
202 android:focusable=“false”
203 />
204
复制代码
1 package cn.yj3g.student.activity;
2
3 import java.io.Serializable;
4 import java.text.SimpleDateFormat;
5 import java.util.Calendar;
6 import java.util.Date;
7 import java.util.HashSet;
8
9 import android.app.Activity;
10 import android.app.DatePickerDialog;
11 import android.app.Dialog;
12 import android.content.ContentValues;
13 import android.content.Intent;
14 import android.database.sqlite.SQLiteDatabase;
15 import android.os.Bundle;
16 import android.view.View;
17 import android.view.View.OnClickListener;
18 import android.widget.Button;
19 import android.widget.CheckBox;
20 import android.widget.CompoundButton;
21 import android.widget.CompoundButton.OnCheckedChangeListener;
22 import android.widget.DatePicker;
23 import android.widget.EditText;
24 import android.widget.RadioButton;
25 import android.widget.RadioGroup;
26 import android.widget.TextView;
27 import android.widget.Toast;
28 import cn.yj3g.student.dao.StudentDao;
29 import cn.yj3g.student.db.StudentDBHelper;
30 import cn.yj3g.student.entry.Student;
31 import cn.yj3g.student.entry.TableContanst;
32
33 public class AddStudentActivity extends Activity implements OnClickListener {
34
35 private static final String TAG = “AddStudentActivity”;
36 private final static int DATE_DIALOG = 1;
37 private static final int DATE_PICKER_ID = 1;
38 private TextView idText;
39 private EditText nameText;
40 private EditText ageText;
41 private EditText phoneText;
42 private EditText dataText;
43 private RadioGroup group;
44 private RadioButton button1;
45 private RadioButton button2;
46 private CheckBox box1;
47 private CheckBox box2;
48 private CheckBox box3;
49 private Button restoreButton;
50 private String sex;
51 private Button resetButton;
52 private Long student_id;
53
54 private StudentDao dao;
55 private boolean isAdd = true;
56
57 @Override
58 public void onCreate(Bundle savedInstanceState) {
59 super.onCreate(savedInstanceState);
60 setContentView(R.layout.add_student);
61 idText = (TextView) findViewById(R.id.tv_stu_id);
62 nameText = (EditText) findViewById(R.id.et_name);
63 ageText = (EditText) findViewById(R.id.et_age);
64 button1 = (RadioButton) findViewById(R.id.rb_sex_female);
65 button2 = (RadioButton) findViewById(R.id.rb_sex_male);
66 phoneText = (EditText) findViewById(R.id.et_phone);
67 dataText = (EditText) findViewById(R.id.et_traindate);
68 group = (RadioGroup) findViewById(R.id.rg_sex);
69 box1 = (CheckBox) findViewById(R.id.box1);
70 box2 = (CheckBox) findViewById(R.id.box2);
71 box3 = (CheckBox) findViewById(R.id.box3);
72
73 restoreButton = (Button) findViewById(R.id.btn_save);
74 resetButton = (Button) findViewById(R.id.btn_clear);
75 dao = new StudentDao(new StudentDBHelper(this));
76
77 // 设置监听
78 restoreButton.setOnClickListener(this);
79 resetButton.setOnClickListener(this);
80 dataText.setOnClickListener(this);
81 checkIsAddStudent();
82 }
83
84 /**
85 * 检查此时Activity是否用于添加学员信息
86 /
87 private void checkIsAddStudent() {
88 Intent intent = getIntent();
89 Serializable serial = intent
90 .getSerializableExtra(TableContanst.STUDENT_TABLE);
91 if (serial == null) {
92 isAdd = true;
93 dataText.setText(getCurrentDate());
94 } else {
95 isAdd = false;
96 Student s = (Student) serial;
97 showEditUI(s);
98
99 }
100 }
101
102 /*
103 * 显示学员信息更新的UI
104 /
105 private void showEditUI(Student student) {
106 // 先将Student携带的数据还原到student的每一个属性中去
107 student_id = student.getId();
108 String name = student.getName();
109 int age = student.getAge();
110 String phone = student.getPhoneNumber();
111 String data = student.getTrainDate();
112 String like = student.getLike();
113 String sex = student.getSex();
114 if (sex.toString().equals(“男”)) {
115 button2.setChecked(true);
116 } else if (sex.toString().equals(“女”)) {
117 button1.setChecked(true);
118 }
119 if (like != null && !"".equals(like)) {
120 if (box1.getText().toString().indexOf(like) >= 0) {
121 box1.setChecked(true);
122 }
123 if (box2.getText().toString().indexOf(like) >= 0) {
124 box2.setChecked(true);
125 }
126 if (box3.getText().toString().indexOf(like) >= 0) {
127 box3.setChecked(true);
128 }
129 }
130 // 还原数据
131 idText.setText(student_id + “”);
132 nameText.setText(name + “”);
133 ageText.setText(age + “”);
134 phoneText.setText(phone + “”);
135 dataText.setText(data + “”);
136 setTitle(“学员信息更新”);
137 restoreButton.setText(“更新”);
138 }
139
140 public void onClick(View v) {
141 // 收集数据
142 if (v == restoreButton) {
143 if (!checkUIInput()) {// 界面输入验证
144 return;
145 }
146 Student student = getStudentFromUI();
147 if (isAdd) {
148 long id = dao.addStudent(student);
149 dao.closeDB();
150 if (id > 0) {
151 Toast.makeText(this, “保存成功, ID=” + id, 0).show();
152 finish();
153 } else {
154 Toast.makeText(this, “保存失败,请重新输入!”, 0).show();
155 }
156 } else if (!isAdd) {
157 long id = dao.addStudent(student);
158 dao.closeDB();
159 if (id > 0) {
160 Toast.makeText(this, “更新成功”, 0).show();
161 finish();
162 } else {
163 Toast.makeText(this, “更新失败,请重新输入!”, 0).show();
164 }
165 }
166
167 } else if (v == resetButton) {
168 clearUIData();
169 } else if (v == dataText) {
170 showDialog(DATE_PICKER_ID);
171 }
172 }
173
174 /*
175 * 清空界面的数据
176 /
177 private void clearUIData() {
178 nameText.setText("");
179 ageText.setText("");
180 phoneText.setText("");
181 dataText.setText("");
182 box1.setChecked(false);
183 box2.setChecked(false);
184 group.clearCheck();
185 }
186
187 /*
188 * 收集界面输入的数据,并将封装成Student对象
189 /
190 private Student getStudentFromUI() {
191 String name = nameText.getText().toString();
192 int age = Integer.parseInt(ageText.getText().toString());
193 String sex = ((RadioButton) findViewById(group
194 .getCheckedRadioButtonId())).getText().toString();
195 String likes = “”;
196 if (box1.isChecked()) { // basketball, football football
197 likes += box1.getText();
198 }
199 if (box2.isChecked()) {
200 if (likes.equals("")) {
201 likes += box2.getText();
202 } else {
203 likes += “,” + box2.getText();
204 }
205 if (likes.equals("")) {
206 likes += box3.getText();
207 } else {
208 likes += “,” + box3.getText();
209 }
210 }
211 String trainDate = dataText.getText().toString();
212 String phoneNumber = phoneText.getText().toString();
213 String modifyDateTime = getCurrentDateTime();
214 Student s=new Student(name, age, sex, likes, phoneNumber, trainDate,
215 modifyDateTime);
216 if (!isAdd) {
217 s.setId(Integer.parseInt(idText.getText().toString()));
218 dao.deleteStudentById(student_id);
219 }
220 return s;
221 }
222
223 /*
224 * 得到当前的日期时间
225 /
226 private String getCurrentDateTime() {
227 SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
228 return format.format(new Date());
229 }
230 /*
231 * 得到当前的日期
232 /
233 private String getCurrentDate() {
234 SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);
235 return format.format(new Date());
236 }
237 /*
238 * 验证用户是否按要求输入了数据
239 */
240 private boolean checkUIInput() { // name, age, sex
241 String name = nameText.getText().toString();
242 String age = ageText.getText().toString();
243 int id = group.getCheckedRadioButtonId();
244 String message = null;
245 View invadView = null;
246 if (name.trim().length() == 0) {
247 message = “请输入姓名!”;
248 invadView = nameText;
249 } else if (age.trim().length() == 0) {
250 message = “请输入年龄!”;
251 invadView = ageText;
252 } else if (id == -1) {
253 message = “请选择性别!”;
254 }
255 if (message != null) {
256 Toast.makeText(this, message, 0).show();
257 if (invadView != null)
258 invadView.requestFocus();
259 return false;
260 }
261 return true;
262 }
263
264 private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
265 @Override
266 public void onDateSet(DatePicker view, int year, int monthOfYear,
267 int dayOfMonth) {
268 dataText.setText(year + “-” + (monthOfYear + 1) + “-” + dayOfMonth);
269 }
270 };
271
272 @Override
273 protected Dialog onCreateDialog(int id) {
274 switch (id) {
275 case DATE_PICKER_ID:
276 return new DatePickerDialog(this, onDateSetListener, 2011, 8, 14);
277 }
278 return null;
279 }
280 }
复制代码
界面效果如下:
修改界面:
在这里我还做了一个额外的功能就是模糊查找,有想法的可以参考下。
StudentSearch代码:
复制代码
package cn.yj3g.student.activity;
import cn.yj3g.student.dao.StudentDao;
import cn.yj3g.student.db.StudentDBHelper;
import cn.yj3g.student.entry.TableContanst;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class StudentSearch extends Activity implements OnClickListener {
private EditText nameText;
private Button button;
private Button reButton;
private Cursor cursor;
private SimpleCursorAdapter adapter;
private ListView listView;
private StudentDao dao;
private Button returnButton;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
nameText = (EditText) findViewById(R.id.et_srarch);
layout=(LinearLayout) findViewById(R.id.linersearch);
button = (Button) findViewById(R.id.bn_sure_search);
reButton = (Button) findViewById(R.id.bn_return);
listView = (ListView) findViewById(R.id.searchListView);
returnButton = (Button) findViewById(R.id.return_id);
dao = new StudentDao(new StudentDBHelper(this));
reButton.setOnClickListener(this);
returnButton.setOnClickListener(this);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == button) {
reButton.setVisibility(View.GONE);
button.setVisibility(View.GONE);
nameText.setVisibility(View.GONE);
layout.setVisibility(View.VISIBLE);
String name = nameText.getText().toString();
cursor = dao.findStudent(name);
if (!cursor.moveToFirst()) {
Toast.makeText(this, "没有所查学员信息!", Toast.LENGTH_SHORT).show();
} else
//如果有所查询的信息,则将查询结果显示出来
adapter = new SimpleCursorAdapter(this, R.layout.find_student_list_item,
cursor, new String[] { TableContanst.StudentColumns.ID,
TableContanst.StudentColumns.NAME,
TableContanst.StudentColumns.AGE,
TableContanst.StudentColumns.SEX,
TableContanst.StudentColumns.LIKES,
TableContanst.StudentColumns.PHONE_NUMBER,
TableContanst.StudentColumns.TRAIN_DATE },
new int[] { R.id.tv_stu_id, R.id.tv_stu_name,
R.id.tv_stu_age, R.id.tv_stu_sex,
R.id.tv_stu_likes, R.id.tv_stu_phone,
R.id.tv_stu_traindate });
listView.setAdapter(adapter);
}else if(v==reButton|v==returnButton){
finish();
}
}
}
复制代码
search.xml
复制代码
1
2
4 android:layout_width=“fill_parent”
5 android:layout_height=“fill_parent” >
6
8 android:layout_width=“fill_parent”
9 android:layout_height=“wrap_content”
10 android:hint=“请输入学员姓名”
11 android:inputType=“textPersonName”
12 />
13
15 android:gravity=“center”
16 android:layout_width=“fill_parent”
17 android:layout_height=“wrap_content”
18 android:text=“确定”
19 />
20
22 android:gravity=“center”
23 android:layout_width=“fill_parent”
24 android:layout_height=“wrap_content”
25 android:text=“返回”
26 />
27
28
30 android:visibility=“gone”
31 android:layout_width=“fill_parent”
32 android:layout_height=“wrap_content”>
33
35 android:layout_weight=“1”
36 android:layout_width=“fill_parent”
37 android:layout_height=“wrap_content”/>
38
40 android:layout_width=“fill_parent”
41 android:layout_height=“wrap_content”
42 android:text=“返回”
43 />
44
45
复制代码
find_student_list_item.xml
复制代码
1
2
4 android:layout_height=“wrap_content”>
5
7 android:background="@drawable/icon" />
8
10
12
14
16
18
20 android:layout_weight=“1” />
21
23
24
复制代码
界面效果如下:
查询结果界面:
在这里还牵扯到了一些常量和数据库的连接以及增删改查等操作,我用我们老师的方法将他们分别放在不同的包里。下面附上代码:
StudentDao类
复制代码
1 package cn.yj3g.student.dao;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import android.content.ContentValues;
8 import android.database.Cursor;
9 import android.database.sqlite.SQLiteDatabase;
10 import android.view.View;
11 import android.widget.SimpleCursorAdapter;
12 import android.widget.TextView;
13 import cn.yj3g.student.activity.R;
14 import cn.yj3g.student.db.StudentDBHelper;
15 import cn.yj3g.student.entry.Student;
16 import cn.yj3g.student.entry.TableContanst;
17
18 public class StudentDao {
19
20 private StudentDBHelper dbHelper;
21 private Cursor cursor;
22 public StudentDao(StudentDBHelper dbHelper) {
23 this.dbHelper = dbHelper;
24 }
25 // 添加一个Student对象数据到数据库表
26 public long addStudent(Student s) {
27
28 ContentValues values = new ContentValues();
29 values.put(TableContanst.StudentColumns.NAME, s.getName());
30 values.put(TableContanst.StudentColumns.AGE, s.getAge());
31 values.put(TableContanst.StudentColumns.SEX, s.getSex());
32 values.put(TableContanst.StudentColumns.LIKES, s.getLike());
33 values.put(TableContanst.StudentColumns.PHONE_NUMBER, s.getPhoneNumber());
34 values.put(TableContanst.StudentColumns.TRAIN_DATE, s.getTrainDate());
35 values.put(TableContanst.StudentColumns.MODIFY_TIME, s.getModifyDateTime());
36 return dbHelper.getWritableDatabase().insert(TableContanst.STUDENT_TABLE, null, values);
37
38 }
39
40 // 删除一个id所对应的数据库表student的记录
41 public int deleteStudentById(long id) {
42
43 return dbHelper.getWritableDatabase().delete(TableContanst.STUDENT_TABLE,
44 TableContanst.StudentColumns.ID + “=?”, new String[] { id + “” });
45 }
46
47 // 更新一个id所对应数据库表student的记录
48 public int updateStudent(Student s) {
49
50 ContentValues values = new ContentValues();
51 values.put(TableContanst.StudentColumns.NAME, s.getName());
52 values.put(TableContanst.StudentColumns.AGE, s.getAge());
53 values.put(TableContanst.StudentColumns.SEX, s.getSex());
54 values.put(TableContanst.StudentColumns.LIKES, s.getLike());
55 values.put(TableContanst.StudentColumns.PHONE_NUMBER, s.getPhoneNumber());
56 values.put(TableContanst.StudentColumns.TRAIN_DATE, s.getTrainDate());
57 values.put(TableContanst.StudentColumns.MODIFY_TIME, s.getModifyDateTime());
58 return dbHelper.getWritableDatabase().update(TableContanst.STUDENT_TABLE, values,
59 TableContanst.StudentColumns.ID + “=?”, new String[] { s.getId() + “” });
60
61 }
62
63 // 查询所有的记录
64 public List
复制代码
1 package cn.yj3g.student.db;
2
3 import cn.yj3g.student.entry.TableContanst;
4 import android.content.Context;
5 import android.database.sqlite.SQLiteDatabase;
6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
7 import android.database.sqlite.SQLiteOpenHelper;
8 import android.util.Log;
9
10 public class StudentDBHelper extends SQLiteOpenHelper {
11
12 private static final String TAG = “StudentDBHelper”;
13
14 public static final String DB_NAME = “student_manager.db”;
15 public static final int VERSION = 1;
16 //构造方法
17 public StudentDBHelper(Context context, String name, CursorFactory factory, int version) {
18 super(context, name, factory, version);
19
20 }
21
22 public StudentDBHelper(Context context) {
23 this(context, DB_NAME, null, VERSION);
24 }
25 //创建数据库
26 @Override
27 public void onCreate(SQLiteDatabase db) {
28 Log.v(TAG, “onCreate”);
29 db.execSQL("create table "
30 + TableContanst.STUDENT_TABLE
31 + “(_id Integer primary key AUTOINCREMENT,”
32 + "name char,age integer, sex char, likes char, phone_number char,train_date date, "
33 + “modify_time DATETIME)”);
34 }
35 //更新数据库
36 @Override
37 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
38 Log.v(TAG, “onUpgrade”);
39 }
40
41 }
复制代码
Student类:
复制代码
1 package cn.yj3g.student.entry;
2
3 import java.io.Serializable;
4
5 import android.view.View;
6 import android.widget.TextView;
7 import cn.yj3g.student.activity.R;
8
9 public class Student implements Serializable{
10
11 private long id;
12 private String name;
13 private int age;
14 private String sex;
15 private String like;
16 private String phoneNumber;
17 private String trainDate;
18 private String modifyDateTime;
19
20
21 public Student() {
22 super();
23 }
24
25 public Student(long id, String name, int age, String sex, String like, String phoneNumber,
26 String trainDate, String modifyDateTime) {
27 super();
28 this.id = id;
29 this.name = name;
30 this.age = age;
31 this.sex = sex;
32 this.like = like;
33 this.phoneNumber = phoneNumber;
34 this.trainDate = trainDate;
35 this.modifyDateTime = modifyDateTime;
36 }
37
38 public Student(String name, int age, String sex, String like, String phoneNumber,
39 String trainDate, String modifyDateTime) {
40 super();
41 this.name = name;
42 this.age = age;
43 this.sex = sex;
44 this.like = like;
45 this.phoneNumber = phoneNumber;
46 this.trainDate = trainDate;
47 this.modifyDateTime = modifyDateTime;
48 }
49
50 public long getId() {
51 return id;
52 }
53 public void setId(long id) {
54 this.id = id;
55 }
56 public String getName() {
57 return name;
58 }
59 public void setName(String name) {
60 this.name = name;
61 }
62 public int getAge() {
63 return age;
64 }
65 public void setAge(int age) {
66 this.age = age;
67 }
68 public String getSex() {
69 return sex;
70 }
71 public void setSex(String sex) {
72 this.sex = sex;
73 }
74 public String getLike() {
75 return like;
76 }
77 public void setLike(String like) {
78 this.like = like;
79 }
80 public String getPhoneNumber() {
81 return phoneNumber;
82 }
83 public void setPhoneNumber(String phoneNumber) {
84 this.phoneNumber = phoneNumber;
85 }
86 public String getTrainDate() {
87 return trainDate;
88 }
89 public void setTrainDate(String trainDate) {
90 this.trainDate = trainDate;
91 }
92 public String getModifyDateTime() {
93 return modifyDateTime;
94 }
95 public void setModifyDateTime(String modifyDateTime) {
96 this.modifyDateTime = modifyDateTime;
97 }
98 @Override
99 public int hashCode() {
100 final int prime = 31;
101 int result = 1;
102 result = prime * result + age;
103 result = prime * result + (int) (id ^ (id >>> 32));
104 result = prime * result + ((like == null) ? 0 : like.hashCode());
105 result = prime * result + ((modifyDateTime == null) ? 0 : modifyDateTime.hashCode());
106 result = prime * result + ((name == null) ? 0 : name.hashCode());
107 result = prime * result + ((phoneNumber == null) ? 0 : phoneNumber.hashCode());
108 result = prime * result + ((sex == null) ? 0 : sex.hashCode());
109 result = prime * result + ((trainDate == null) ? 0 : trainDate.hashCode());
110 return result;
111 }
112 @Override
113 public boolean equals(Object obj) {
114 if (this == obj)
115 return true;
116 if (obj == null)
117 return false;
118 if (getClass() != obj.getClass())
119 return false;
120 Student other = (Student) obj;
121 if (age != other.age)
122 return false;
123 if (id != other.id)
124 return false;
125 if (like == null) {
126 if (other.like != null)
127 return false;
128 } else if (!like.equals(other.like))
129 return false;
130 if (modifyDateTime == null) {
131 if (other.modifyDateTime != null)
132 return false;
133 } else if (!modifyDateTime.equals(other.modifyDateTime))
134 return false;
135 if (name == null) {
136 if (other.name != null)
137 return false;
138 } else if (!name.equals(other.name))
139 return false;
140 if (phoneNumber == null) {
141 if (other.phoneNumber != null)
142 return false;
143 } else if (!phoneNumber.equals(other.phoneNumber))
144 return false;
145 if (sex == null) {
146 if (other.sex != null)
147 return false;
148 } else if (!sex.equals(other.sex))
149 return false;
150 if (trainDate == null) {
151 if (other.trainDate != null)
152 return false;
153 } else if (!trainDate.equals(other.trainDate))
154 return false;
155 return true;
156 }
157 @Override
158 public String toString() {
159 return “Student [id=” + id + “, name=” + name + “]”;
160 }
161 }
复制代码
常量TableContanst类:
复制代码
1 package cn.yj3g.student.entry;
2
3 public final class TableContanst {
4
5 public static final String STUDENT_TABLE = “student”;
6
7 public static final class StudentColumns {
8 public static final String ID = “_id”;
9 public static final String NAME = “name”;
10 public static final String AGE = “age”;
11 public static final String SEX = “sex”;
12 public static final String LIKES = “likes”;
13 public static final String PHONE_NUMBER = “phone_number”;
14 public static final String TRAIN_DATE = “train_date”;
15 public static final String MODIFY_TIME = “modify_time”;
16 }
17 }
复制代码
最后我将我的values里的strings.xml和AndroidManifest.xml附在下面,以供大家参考。
strings.xml:
复制代码
1
2
3 Hello World, TextStudentManager!
4 学员管理系统
5 学员信息修改
6 男
7 女
8 唱歌
9 跳舞
10 健身
11 添加学员信息
12 请选择
13
复制代码
AndroidManifest.xml:
复制代码
1
2
4 android:versionCode=“1”
5 android:versionName=“1.0”>
6
7
8
9
11
12
13
14
15
16
17
19
20
22
23
25
26
28
29
31 android:authorities=“cn.yj3g.student.activity.MyStudentManagerProvider”>
32
33
34
35
36
38
复制代码
由于自己也是初学者,所以大家发现什么问题,可以留言,大家一起学习。
文章最后发布于: 2015-02-16