今天上课老师让利用ListView和数据库做一个学员信息管理系统。下面我就把自己做的代码复制下来,供大家参考。
首页的布局main.xml
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:id="@+id/RelativeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/bn_search_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" android:gravity="center_vertical" /> <Button android:gravity="center" android:text="@string/myButton" android:id="@+id/btn_add_student" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/bn_search_id" android:layout_toLeftOf="@+id/bn_select" /> <Button android:gravity="center_vertical" android:text="选择" android:id="@+id/bn_select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true">Button> RelativeLayout> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text=" ID 姓 名 年 龄 性 别 " /> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="wrap_content"/> <LinearLayout android:orientation="horizontal" android:id="@+id/showLiner" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/bn_delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除" android:enabled="false" /> <Button android:id="@+id/bn_selectall" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="全选" /> <Button android:id="@+id/bn_canel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" /> LinearLayout> LinearLayout>
创建listView中显示学员信息的xml格式student_list_item.xml
android:orientation=
"horizontal"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_weight=
"1"
android:background=
"@drawable/icon"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"gone"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"gone"
/>
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_weight=
"1"
android:visibility=
"gone"
/>
android:layout_width=
"fill_parent"
android:layout_gravity=
"center"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"gone"
/>
android:id=
"@+id/cb_box"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"gone"
android:checked=
"false"
android:focusable=
"false"
/>
|
创建一个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<Long> 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<Long>(); 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文件
界面效果图如下:
删除界面:
在点击ListView中的一条Item时,老师要求显示出这个学生的详细信息,所以需要一个xml文件来显示这个信息。在这里我创建了一个student_info.xml文件
1 xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 android:padding="5dip" 7 > 8 <TextView android:id="@+id/id2_text_id" 9 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_info_id" 20 android:layout_width="fill_parent" 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 <TextView android:id="@+id/name2_text_id" 29 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_info_name" 42 android:layout_width="fill_parent" 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 <TextView android:id="@+id/age2_text_id" 51 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_info_age" 62 android:layout_width="fill_parent" 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 <TextView android:id="@+id/sex2_text_id" 71 android:layout_width="80dip" 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 <TextView 83 android:id="@+id/tv_info_sex" 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 <TextView android:id="@+id/like2_text_id" 93 android:layout_width="80dip" 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 <TextView android:layout_height="40dip" 104 android:id="@+id/tv_info_likes" 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 <TextView android:id="@+id/contact2_text_id" 112 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_info_phone" 123 android:layout_width="fill_parent" 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 <TextView android:id="@+id/train2_time_text_id" 132 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_info_train_date" 143 android:layout_width="fill_parent" 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 <Button android:id="@+id/back_to_list_id" 152 android:layout_width="fill_parent" 153 android:layout_height="wrap_content" 154 android:text="返回列表界面" 155 android:layout_below="@id/train2_time_text_id" 156 android:layout_alignParentLeft="true" 157 android:layout_alignParentRight="true" 158 android:onClick="goBack"> 159 Button> 160 RelativeLayout>
当然我们需要一个Activity来显示这些信息,在这里我创建了一个ShowStudentActivity。
界面效果如下:
最最重要的环节来了,我们做这个系统主要是为了管理学员,所以增加和修改学员信息是必不可少的,因此需要一个Activity来专门提供添加和修改学员信息。在这里还有一件重要的事情要做,那就是要设计添加和修改学员的界面,在这里可用用相对布局做比较简单。我在这里创建了一个AddStudentActivity来添加和修改学员信息,下面附上相关代码:
add_student.xml
1 xml version="1.0" encoding="utf-8"?> 2 3 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 android:fillViewport="true" 7 android:scrollbarStyle="outsideInset" > 8 <RelativeLayout 9 android:orientation="vertical" 10 android:layout_width="fill_parent" 11 android:layout_height="fill_parent" 12 android:padding="5dip" 13 > 14 15 <TextView android:id="@+id/tv_stu_text_id" 16 android:layout_width="80dip" 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 <TextView android:id="@+id/tv_stu_id" 27 android:layout_width="fill_parent" 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 <TextView android:id="@+id/tv_name_text" 40 android:layout_width="80dip" 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 <EditText android:id="@+id/et_name" 52 android:layout_width="fill_parent" 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 <TextView android:id="@+id/tv_age_text" 62 android:layout_width="80dip" 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 <EditText android:id="@+id/et_age" 73 android:layout_width="fill_parent" 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 <TextView android:id="@+id/tv_sex_text" 85 android:layout_width="80dip" 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 <RadioGroup 97 android:id="@+id/rg_sex" 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 <RadioButton 106 android:id="@+id/rb_sex_male" 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 <RadioButton android:layout_width="wrap_content" 114 android:layout_height="wrap_content" 115 android:text="女" 116 android:id="@+id/rb_sex_female" 117 android:layout_weight="1" 118 android:textSize="16sp"> 119 RadioButton> 120 RadioGroup> 121 122 <TextView android:id="@+id/tv_likes_text" 123 android:layout_width="80dip" 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 <CheckBox 134 android:id="@+id/box1" 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 >CheckBox> 141 <CheckBox 142 android:id="@+id/box2" 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 >CheckBox> 149 <CheckBox 150 android:id="@+id/box3" 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 >CheckBox> 157 158 <TextView android:id="@+id/tv_phone_text" 159 android:layout_width="80dip" 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 <EditText android:id="@+id/et_phone" 170 android:layout_width="fill_parent" 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 <TextView android:id="@+id/tv_traindate_text" 182 android:layout_width="80dip" 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 <EditText android:id="@+id/et_traindate" 194 android:layout_width="fill_parent" 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 <Button android:id="@+id/btn_save" 205 android:layout_width="wrap_content" 206 android:layout_height="wrap_content" 207 android:text="保存" 208 android:layout_below="@id/tv_traindate_text" 209 android:layout_alignRight="@id/rg_sex"> 210 Button> 211 <Button android:id="@+id/btn_clear" 212 android:layout_width="wrap_content" 213 android:layout_height="wrap_content" 214 android:text="重置" 215 android:layout_below="@id/tv_traindate_text" 216 android:layout_toLeftOf="@id/btn_save" 217 android:layout_marginRight="10dip"> 218 Button> 219 RelativeLayout> 220 ScrollView>
AddStudentActivity代码:
界面效果如下:
修改界面:
在这里我还做了一个额外的功能就是模糊查找,有想法的可以参考下。
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
find_student_list_item.xml
1 xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="horizontal" android:layout_width="fill_parent" 4 android:layout_height="wrap_content"> 5 <ImageView android:layout_width="fill_parent" 6 android:layout_height="wrap_content" android:layout_weight="1" 7 android:background="@drawable/icon" /> 8 <TextView android:id="@+id/tv_stu_id" android:layout_width="fill_parent" 9 android:layout_height="wrap_content" android:layout_weight="1" /> 10 <TextView android:id="@+id/tv_stu_name" android:layout_width="fill_parent" 11 android:layout_height="wrap_content" android:layout_weight="1" /> 12 <TextView android:id="@+id/tv_stu_age" android:layout_width="fill_parent" 13 android:layout_height="wrap_content" android:layout_weight="1" /> 14 <TextView android:id="@+id/tv_stu_sex" android:layout_width="fill_parent" 15 android:layout_height="wrap_content" android:layout_weight="1" /> 16 <TextView android:id="@+id/tv_stu_likes" android:layout_width="fill_parent" 17 android:layout_height="wrap_content" android:layout_weight="1" /> 18 <TextView android:id="@+id/tv_stu_phone" 19 android:layout_width="fill_parent" android:layout_height="wrap_content" 20 android:layout_weight="1" /> 21 <TextView android:id="@+id/tv_stu_traindate" android:layout_width="fill_parent" 22 android:layout_height="wrap_content" android:layout_weight="1" /> 23 24 LinearLayout>
界面效果如下:
查询结果界面:
在这里还牵扯到了一些常量和数据库的连接以及增删改查等操作,我用我们老师的方法将他们分别放在不同的包里。下面附上代码:
StudentDao类
StudentDBHelper类
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类:
常量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:
AndroidManifest.xml:
1 xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="cn.yj3g.student.activity" 4 android:versionCode="1" 5 android:versionName="1.0"> 6 <uses-sdk android:minSdkVersion="8" /> 7 8 <application android:icon="@drawable/student" android:label="@string/app_name"> 9 <activity android:name=".StudentListActivity" 10 android:label="学员信息列表"> 11 <intent-filter> 12 <action android:name="android.intent.action.MAIN" /> 13 <category android:name="android.intent.category.LAUNCHER" /> 14 intent-filter> 15 activity> 16 17 <activity android:name=".AddStudentActivity" 18 android:label="学员信息添加"> 19 activity> 20 <activity android:name=".ShowStudentActivity" 21 android:label="学员详细信息"> 22 activity> 23 <activity android:name=".StudentSearch" 24 android:label="学员信息查询"> 25 activity> 26 <activity android:name=".SearchResult" 27 android:label="查询结果"> 28 activity> 29 <provider 30 android:name=".MyStudentManagerProvider" 31 android:authorities="cn.yj3g.student.activity.MyStudentManagerProvider">provider> 32 <uses-library android:name="android.test.runner" /> 33 34 application> 35 <uses-permission android:name="android.permission.READ_CONTACTS">uses-permission> 36 <instrumentation android:name="android.test.InstrumentationTestRunner" 37 android:targetPackage="cn.yj3g.student.activity" android:label="Tests for My App" /> 38 manifest>
由于自己也是初学者,所以大家发现什么问题,可以留言,大家一起学习。
原文地址: http://www.cnblogs.com/zxl-jay/archive/2011/09/21/2182890.html#2302140