這題乍看之下真的讓人覺得一定做不完,其實因為有超過一半的東西都是預先設定好的,所以只要記得那些地方要額外設定,其實還蠻簡單的。
先看主程式,首先是 Menu 要自訂項目,重點在 itemId 要配合常數列舉去設定
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// ---MENU_ADD等為專案預設常數
menu.add(0, MENU_ADD, 0, R.string.strAddButton);
menu.add(0, MENU_EDIT, 1, R.string.strEditButton);
menu.add(0, MENU_DELETE, 2, R.string.strDeleteButton);
return true;
}
然後 list 的onClick已經有放click的時候該做什麼,onItemSelected只要照抄就好
public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) {
// ---依position移動cursor以取得_id
myCursor.moveToPosition(arg2);
_id = myCursor.getInt(0);
myEditText.setText(myCursor.getString(1));
}
然後是CUD的組合,也是我們主程式中最主要要寫的部分,reloadListView是做完動作後重新binding清單用的自訂method。
private void addTodo() {
gaaSQLiteOpenHelper.insert(myEditText.getText().toString());
reloadListView();
}
private void editTodo() {
gaaSQLiteOpenHelper.update(_id, myEditText.getText().toString());
reloadListView();
}
private void deleteTodo() {
gaaSQLiteOpenHelper.delete(_id);
reloadListView();
}
//---自訂方法,重新query取得新的cursor後,重新binding ListView。
private void reloadListView(){
myCursor.requery();
myListView.invalidateViews();
myEditText.setText("");
_id = 0;
}
然後是副程式,SQLiteOpenHelper這個類別,建構跟 select 都已經預先寫好了,我們要改的還是在 CUD 的部分
public long insert(String text) {
SQLiteDatabase db = this.getWritableDatabase();
//---ContentValues是SQLite用的值集合
ContentValues values=new ContentValues();
values.put(FIELD_TEXT, text);
return db.insert(TABLE_NAME, null, values);
}
public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_id + " = ?";
String[] whereValue = { Integer.toString(id) };
//---Where已經設定好了,只要填入使用即可。
db.delete(TABLE_NAME, where, whereValue);
}
public void update(int id, String text) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_id + " = ?";
String[] whereValue = { Integer.toString(id) };
//---update要結合Where跟值集合
ContentValues values=new ContentValues();
values.put(FIELD_TEXT, text);
db.update(TABLE_NAME, values, where, whereValue);
}
這次卡最久的部分是打錯字... getText 打成 getTag 造成 NullException 然後在那裏想半天,搞不懂哪裡造成的 Null值。

沒有留言:
張貼留言