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){//获得菜单IDswitch(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();}}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;@Overridepublic 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() {@Overridepublic 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]