2011-02-21 16 views
7

Android uygulamasında basit bir listeyi yönetmeye çalışıyorum. Listenin içeriği bir SQLite veritabanında tutulur. Kullanıcı belirli bir satırı seçip tuttuğunda, bir "Sil" seçeneğiyle bir bağlam menüsü görüntülenir. "Sil" seçeneğini belirlediklerinde, satır veritabanından silinir, ancak görünüm yenilenmez. Uygulamadan çıkıp tekrar giriş yaptığımda, uygun satır kaldırıldı. Yani, satır silinir biliyorum, sadece yenilemez ListView. Ben eksik Burada Veritabanı değiştikten sonra ListView'ümü nasıl yenilerim?

SQLiteDatabase db = tasks.getReadableDatabase(); 
Cursor cursor = db.query(TABLE_NAME, 
    new String[] { _ID, TITLE, DETAILS, }, 
    null, null, null, null, TITLE + " DESC"); 
startManagingCursor(cursor); 

ListView lv = (ListView) findViewById(R.id.list); 
lv.setAdapter(new SimpleCursorAdapter(this, 
    android.R.layout.simple_list_item_1, 
    cursor, 
    new String[] {TITLE}, 
    new int[] { android.R.id.text1} 
)); 
onContextItemSelected yöntemde

...

switch(item.getItemId()) { 
case 0: 
    SQLiteDatabase db = tasks.getWritableDatabase(); 
    ListView lv = (ListView) findViewById(R.id.list); 
    SimpleCursorAdapter adapter = (SimpleCursorAdapter) lv.getAdapter(); 
    db.delete(TABLE_NAME, "_ID=?", new String[] {adapter.getCursor().getString(0)}); 
    adapter.notifyDataSetChanged(); // Not working, clears screen and doesn't reload 
    return true; 
} 
return super.onContextItemSelected(item); 

... İlgili kod bitleri ... onCreate yöntemde

vardır ?

Teşekkürler!

cevap

5

notifyDataSetChanged()'dan kurtulun ve Cursor numaranıza requery() numaralı telefonu arayın. Bunu gösteren Here is a sample project.

+0

Teşekkürler! Başvuruda bulunduğunuz proje kodunu inceledim ve İmleci sınıfla paylaşmam gerektiğini keşfettim. Sanırım kopyalayıp etrafta dolaşıyordum, bu yüzden requery() yöntemini etkisiz hale getirdim. Bir kez sınıf düzeyinde bir değişken yaptım, bu hile yaptı. –

İlgili konular