這題乍看之下真的讓人覺得一定做不完,其實因為有超過一半的東西都是預先設定好的,所以只要記得那些地方要額外設定,其實還蠻簡單的。
先看主程式,首先是 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值。
沒有留言:
張貼留言