2011-08-07 61 views
0

好吧,我還是一個新的android和eclipse,但標題幾乎說明了一切。我有一個從數據庫中的行填充的ListView。我想在選中列表視圖項並從按鈕單擊時刪除數據庫行,然後刷新ListView。到目前爲止,我的代碼填充列表,並且我卡在那裏。任何幫助將不勝感激。數據庫填充ListView從數據庫上的按鈕中刪除選擇

public class ViewListingsActivity extends Activity implements OnClickListener { 
    SQLiteDatabase db; 
    ListView listview; 
    Button button; 
    SimpleCursorAdapter adapter; 
    String value; 
    private static final String TAG = DBHelper.class.getSimpleName(); 
    public static final String DB_ADDRESS = BaseColumns._ID; 
    public static final String DB_DESCRIPTION = "Description"; 
    public static final String DB_URL = "URL"; 
    final String dbTable = "Realtor_SMS_Table"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewlisting); 
     listview = (ListView) findViewById(R.id.list); 
     button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(this); 
     DBHelper dbhelper = new DBHelper(ViewListingsActivity.this); 
     db = dbhelper.getWritableDatabase(); 

     Cursor cursor = db.query(dbTable, null, null, null, null, null, null); 
     startManagingCursor(cursor); 

     String[] from = new String[] { DB_ADDRESS, DB_DESCRIPTION, DB_URL }; 
     int[] to = new int[] { R.id.textlistaddress, R.id.textlistdescription, 
       R.id.textlisturl }; 
     adapter = new SimpleCursorAdapter(this, R.layout.rowlist, cursor, from, 
       to); 

     listview.setAdapter(adapter); 
     listview.setChoiceMode(1); 

    } 

    public void onClick(View arg0) { 
     db.delete(dbTable, "_id=" + value, null); 
     adapter.notifyDataSetChanged(); 

     Log.d("wtf", "deleted: " + value); 

    } 

} 

好吧,這裏是我的新編輯的代碼:

public class ViewListingsActivity extends Activity implements OnClickListener { 
    SQLiteDatabase db; 
    ListView listview; 
    Button button; 
    SimpleCursorAdapter adapter; 
    String value; 
    OnItemClickListener listener; 
    Cursor newcursor; 
    String deleteinfo; 

    private static final String TAG = DBHelper.class.getSimpleName(); 
    public static final String DB_ADDRESS = BaseColumns._ID; 
    public static final String DB_DESCRIPTION = "Description"; 
    public static final String DB_URL = "URL"; 
    final String dbTable = "Realtor_SMS_Table"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewlisting); 
     listview = (ListView) findViewById(R.id.list); 
     button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(this); 
     DBHelper dbhelper = new DBHelper(ViewListingsActivity.this); 
     db = dbhelper.getWritableDatabase(); 

     Cursor cursor = db.query(dbTable, null, null, null, null, null, null); 
     startManagingCursor(cursor); 

     String[] from = new String[] { DB_ADDRESS, DB_DESCRIPTION, DB_URL }; 
     int[] to = new int[] { R.id.textlistaddress, R.id.textlistdescription, 
       R.id.textlisturl }; 
     adapter = new SimpleCursorAdapter(this, R.layout.rowlist, cursor, from, 
       to); 

     listview.setAdapter(adapter); 
     listview.setChoiceMode(1); 
     listview.setOnItemClickListener(listener); 

    } 
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 

    newcursor = ((SimpleCursorAdapter)listview.getAdapter()).getCursor(); 
    deleteinfo = newcursor.getString(1);//getString(0); 
    } 

    public void onClick(View arg0) { 
     db.delete(dbTable, "_id=" + deleteinfo, null); 
     adapter.notifyDataSetChanged(); 

     Log.d("wtf", "deleted: " + deleteinfo); 

    } 

} 

我deleteinfo字符串保存返回null,爲什麼不檢索正確的列值?

+1

問多個問題中的一個問題格式那種失敗的問題/答案的模式,不是嗎?無論如何,不​​要在onItemClick中調用getCursor() - 在我的編輯中更仔細地查看我的代碼。 –

+0

對不起,你完全正確。無論如何,我明白了。你們好棒!! – Ryan

回答

0

要刪除,只需從普通查詢中刪除數據庫中的行。隨後,通過更新SimpleCursorAdapter:

Cursor cursor = ((SimpleCursorAdapter)listview.getAdapter()).getCursor(); 
cursor.requery(); 

注意
這必須在UI線程來完成

編輯
設置它爲您提供了選擇的項目的位置參數的OnItemClickListener 。見Adapter.onItemClickListener | Android Developers

這個位置可以用來搶光標指向該行:

Cursor cursor = (Cursor) ((SimpleCursorAdapter)listview.getAdapter()).getItem(position); 
+0

我如何知道用戶選擇了哪個ListView項目(DB中的行)? – Ryan

+0

這給了我......列表中位置的長ID?光標?,我很困惑我們如何將它與數據庫中的行相關聯 – Ryan