2012-01-28 128 views
3

數據庫中的各行填充到自定義列表視圖中。該行的id也顯示在列表視圖中。我想要的是通過單擊相應的列表來刪除特定的行。通過從填充的列表視圖中取出ID從SQLite數據庫中刪除一行

這裏是我用於顯示數據庫中的內容的代碼:

class NoteAdapter extends CursorAdapter { 

    public NoteAdapter(Cursor c) { 
     super(Reccuring.this, c); 

    } 

    @Override 
    public void bindView(View row, Context ctxt, Cursor c) { 
     NoteHolder holder = (NoteHolder) row.getTag(); 
     holder.populateFrom(c, helper); 

    } 

    @Override 
    public View newView(Context ctxt, Cursor c, ViewGroup parent) { 
     LayoutInflater inflater = getLayoutInflater(); 
     View row = inflater.inflate(R.layout.row1, parent, false); 
     NoteHolder holder = new NoteHolder(row); 
     row.setTag(holder); 
     return row; 
    } 
} 

static class NoteHolder { 
    private TextView name = null; 
    private TextView number = null; 
    private TextView idtext = null; 

    NoteHolder(View row) { 
     name = (TextView) row.findViewById(R.id.noteText); 
     number= (TextView) row.findViewById(R.id.noteText1); 
     idtext = (TextView) row.findViewById(R.id.noteText3); 

    } 

    void populateFrom(Cursor c, NoteHelper helper) { 
     name.setText(helper.getNote(c)); 
     number.setText(helper.getNote1(c)); 
     idtext.setText(helper.getNote2(c)); 

    } 
} 

這是我的數據庫:

public class NoteHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "Test.db"; 
    private static final int SCHEMA_VERSION = 1; 

    public NoteHelper(Context context) { 
     super(context, DATABASE_NAME, null, SCHEMA_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE Notes (_id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT, num TEXT, sDate TEXT);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} 

    public void insert(String note, String amt, String sDate) { 
     ContentValues cv = new ContentValues(); 
     cv.put("note", note); 
     cv.put("num", num); 
     cv.put("sDate", sDate); 
     getWritableDatabase().insert("Notes", "notes", cv); 
    } 

    public String getNote(Cursor c) { 
     return (c.getString(1)); 

    } 

    public String getNote1(Cursor c) { 
     return (c.getString(2)); 

    } 

    public String getNote2(Cursor c) { 
     return (c.getString(0)); 

    } 



    public Cursor getAll() { 
     return (getReadableDatabase().rawQuery(
       "SELECT _id, note, num, sDate FROM Notes", null)); 

     } 

    } 
} 

如何選擇在ListView行和刪除相應的數據庫中的行。

回答

2

首先得到的位置,這是通過列表視圖的方法onItemClickListener()點擊值:

@Override 
public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 
    LinearLayout linearLayout = (LinearLayout) view;// The main layout which contains your child views in which value is displayed 

    TextView name = (TextView)linearLayout.getChildAt(0);// get child textview 1 

    String nametext = name.getText().toString();// get String out of those textview 

    deleteOldData(nametext) 
} 

然後轉到您的數據庫類和編寫代碼:

public void deleteOldData(String nametext) { 

      _sqliteDB.delete(tablename, " note = '" + nametext + "'", null); 

    } 

這樣你可以刪除你的表格特定的行。

如果你無法做到這一點或可能是數據庫中的筆記列是相同的,所以使用唯一標識符設置在列表視圖的文本視圖,提取它在這種形式,然後將該值傳遞給數據庫代碼,然後刪除它。

+0

它工作正常。謝謝哥們。 – user1166422 2012-01-28 17:43:53

+0

歡迎你,我的朋友有任何疑問,只是評論我好 – 2012-01-30 06:47:18

相關問題