Android 学习 组合界面对Sqlite数据库做增,删,改,查.操作
Android 学习 结合界面对Sqlite数据库做增,删,改,查.操作
斯诺克爱好者网:http://www.kkyule.com
淘宝精品导航 http://www.nitaomei.com
在上一篇博客中已经对SQLite数据库做过封装,此博客结合上博客做界面操作. 将数据库中数据查询出来在界面中用ListView显示,并增加菜单提示对数据做新增和删除操作.单选择一条记录单击时对此条记录做修改操作. 所用到的界面布局: 主界面ListActivity:
<?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"><listview android:id="@+id/android:list" android:layout_width="wrap_content" android:layout_height="wrap_content"></listview><textview android:id="@+id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="您还没有开始写日记呢!点击下边的Menu按钮开始写日记吧:)"></textview></linearlayout>
在ListView中增加的控件布局:
<?xml version="1.0" encoding="utf-8" ?><relativelayout android:id="@+id/row" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"><textview android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="30px" android:maxwidth="200dip" android:textsize="22sp" android:layout_margintop="10dip" android:text="第一组第一项"></textview><textview android:id="@+id/created" android:layout_width="wrap_content" android:layout_height="35px" android:layout_alignparentright="true" android:layout_marginleft="10dip" android:layout_margintop="10dip" android:text="1999年12月3号"></textview></relativelayout>
新增和修改界面布局:
<?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"><textview android:text="@string/notepad_title" android:layout_width="fill_parent" android:layout_height="wrap_content"></textview><edittext android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content"></edittext><textview android:text="@string/notepad_body" android:layout_width="fill_parent" android:layout_height="wrap_content"></textview><edittext android:id="@+id/body_text" android:layout_width="fill_parent" android:layout_height="wrap_content"></edittext><button android:id="@+id/button" android:text="@string/notepad_button" android:layout_width="fill_parent" android:layout_height="wrap_content"></button> </linearlayout>
此功能牵涉到两个Activity所有还需要修改AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="us.imnet.iceskysl.db.notepad" android:versioncode="1" android:versionname="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".ActivityMain"><intent-filter><action android:name="android.intent.action.MAIN"></action><category android:name="android.intent.category.LAUNCHER"></category></intent-filter></activity><activity android:name=".ActivityDiaryEdit"></activity></application><uses-sdk android:minsdkversion="5"></uses-sdk></manifest>
具体代码:
package us.imnet.iceskysl.db.notepad; import android.app.ListActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleCursorAdapter; /** * 对数据库做增,删,改,查操作的主界面 * @author xuzhenqin * */ public class ActivityMain extends ListActivity { /** * 用来标识新增操作 */ private static final int ACTIVITY_CREATE = 0; /** * 用来标识编辑操作 */ private static final int ACTIVITY_EDIT = 1; /** * 第一个菜单 */ private static final int INSERT_ID = Menu.FIRST; /** * 第二个菜单 */ private static final int DELETE_ID = Menu.FIRST + 1; /** * 数据库操作对象 */ private DiaryDbAdapter diaryDb ; /** * 数据库返回结果对象 */ private Cursor cursor; public void onCreate(Bundle bundle) { super.onCreate(bundle); //加载界面配置文件 setContentView(R.layout.diary_list); //获得数据库对象 diaryDb = new DiaryDbAdapter(this); //打开数据库连接 diaryDb.open(); //显示查询出来的所有数据 showListView(); } /** * 查询数据表中所有数据 */ private void showListView() { //查询全部表记录 cursor = diaryDb.getAllNotes(); // String[] from = new String[]{DiaryDbAdapter.KEY_TITLE,DiaryDbAdapter.KEY_BODY}; int[] to = new int[]{R.id.text1,R.id.created}; //组装ListAdapter数据 //第一个参数控件布局界面,放Context //第二个参数对象放数据Cursor //第三个参数数据绑定到用户界面的名称 //第四个参数数据绑定到用户界面的控件 ListAdapter cursorAdapter = new SimpleCursorAdapter(this,R.layout.diary_row,cursor,from,to); //将组装的ListAdapter放入ListActivity中 setListAdapter(cursorAdapter); } /** * 创建菜单 */ public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); //第一个参数菜单组名 //第二个参数设置菜单ID //第三个参数菜单顺序标识 //第四个参数菜单在界面显示的内容 menu.add(0, INSERT_ID, 0, R.string.menu_insert); menu.add(0, DELETE_ID, 0, R.string.menu_delete); return true; } /** * 增加菜单事件 */ public boolean onMenuItemSelected(int featureId,MenuItem item) { //获得菜单ID switch(item.getItemId()) { case INSERT_ID: Log.i("INSERT:", String.valueOf(INSERT_ID)); //创建新记录 createDiary(); return true; case DELETE_ID: Log.i("DELETE_ID:", String.valueOf(getListView().getSelectedItemId())); //删除选择的记录 diaryDb.deleteDiary(getListView().getSelectedItemId()); //显示新列表 showListView(); return true; } //不做操作返回 return super.onMenuItemSelected(featureId, item); } /** * 创建新记录 */ private void createDiary() { //创建新记录是切换界面 //第一个参数传入的本对象 //第二个参数为新创建的界面 Intent intent = new Intent(this,ActivityDiaryEdit.class); //启动Activity切换界面 startActivityForResult(intent, ACTIVITY_CREATE); } /** * 单击一条记录是弹出修改界面 */ protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Cursor c = cursor; //将指针指向单击的那条记录 c.moveToPosition(position); //创建新记录是切换界面 //第一个参数传入的本对象 //第二个参数为新创建的界面 Intent intent = new Intent(this,ActivityDiaryEdit.class); //增加选择的记录,传送到新界面用于填充对应的控件值 intent.putExtra(DiaryDbAdapter.KEY_ROWID, id); intent.putExtra(DiaryDbAdapter.KEY_TITLE, c.getString(c .getColumnIndexOrThrow(DiaryDbAdapter.KEY_TITLE))); intent.putExtra(DiaryDbAdapter.KEY_BODY, c.getString(c .getColumnIndexOrThrow(DiaryDbAdapter.KEY_BODY))); //启动Activity切换界面 startActivityForResult(intent, ACTIVITY_EDIT); } /** * 新增或修改界面结束后返回到此界面来所接收的动作 */ protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); showListView(); } } [/code] [code="java"] package us.imnet.iceskysl.db.notepad; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; /** * 增加内容Activity * @author xuzhenqin * */ public class ActivityDiaryEdit extends Activity { /** * 增加标题文本框 */ private EditText title; /** * 增加内容文本框 */ private EditText body; /** * 确定按钮 */ private Button button; /** * 行ID */ private Long rowId; /** * 操作数据库对象 */ private DiaryDbAdapter diaryDb; @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); //加载界面配置文件 setContentView(R.layout.notepad); //获得数据库对象 diaryDb = new DiaryDbAdapter(this); //根据配置文件ID获得标题文本框对象 title = (EditText)findViewById(R.id.title); //根据配置文件ID获得内容文本框对象 body = (EditText)findViewById(R.id.body_text); //根据配置文件ID获得按钮对象 button = (Button)findViewById(R.id.button); rowId = null; //通过前置页面传入的Intent获得传入的Bundle对象 //Intent在Android中用于两个Actitvity之间传数据使用 //Bundle对象与JDK中的MAP对象类似,以键值对形式存方法数据 Bundle bund = getIntent().getExtras(); if(bund != null) { Log.i("bund:",bund.toString()); //获得前置页面中传入的title值 String title_db = bund.getString(DiaryDbAdapter.KEY_TITLE); //获得前置页面中传入的body值 String body_db = bund.getString(DiaryDbAdapter.KEY_BODY); //获得前置页面中传入的rowid值 rowId = bund.getLong(DiaryDbAdapter.KEY_ROWID); if(title_db != null) { title.setText(title_db); } if(body_db != null) { body.setText(body_db); } } //增加button的点击事件 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title_db = title.getText().toString(); String body_db = body.getText().toString(); //打开数据库连接 diaryDb.open(); //根据是否有前置rowid来判断是否为修改或新建 if(rowId != null) { diaryDb.updateDiary(rowId, title_db, body_db); } else { diaryDb.createDiary(title_db, body_db); } //关闭数据库连接 diaryDb.close(); //增加或修改数据后回到前置界面 Intent mIntent = new Intent(); setResult(RESULT_OK, mIntent); //刷新新界面 finish(); } }); } }
1 楼
star65225692
2010-11-17
android操作SQLite增删改减教程
2 楼
wanggn
2011-11-30