2013-06-05 31 views
0

你好,我正在創建數據庫應用程序,其中所有記錄顯示在數據庫的列表視圖和當用戶長按列表視圖選擇的項目應該顯示從列表視圖我已添加標識每個項目,我刪除項目的ID從列表視圖中選擇的問題是,當項目被刪除,我插入新項目它的ID增加,它不匹配listview選定的項目,請提前幫助我...從數據庫中刪除列表視圖的項目,但它沒有正確刪除

這裏是列表視圖

list.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      View v=findViewById(R.id.groupList); 
      //activity.openContextMenu(v); 

      helper.deleteName((arg2+1)); 
      c.requery();     
      return true; 
     } 
    }); 

用戶長按的密碼,這裏是LOGI從數據庫

class DatabaseHelper{ 

    public void insertGroup(String name){ 
     db.execSQL("insert into GroupNames (names) values('"+name+"')"); 
    } 

    public Cursor selectAll(){ 
     return db.rawQuery("select * from GroupNames", null); 
    } 

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

    public void deleteName(int i){ 

     c.moveToPosition(i); 
     db.execSQL("delete from GroupNames where _id="+i);   
    } 
} 
+0

您可以創建一個全局變量COUNT和增量或減量accoding添加或刪除行。(它只是我的看法) – amalBit

+0

你誤位置和ID。 – njzk2

+0

是否嘗試記錄你的代碼? – NaserShaikh

回答

0

arg2刪除項目的C不是你的項目的ID,看看the official documentation明白它是什麼!

arg3不是數據庫中您的項目的ID,而是Android資源的行ID(即R.id.xxx),因此您不能只使用onItemLongClick()的參數給出的數據。

知道這一點,你可以找出行helper.deleteName((arg2+1));是不正確的,並不意味着什麼:arg2+1對你的數據庫沒有任何意義。

溶液(不是我認爲最好的),應包括在您的項目視圖的無形字段,用於存儲數據庫的實際_id領域。然後,當檢測到長按時,您將返回該值並將其傳遞到helper.deleteName()

+0

是的,我已經包括自動增量字段_id到我的數據庫 –

+0

@ user2063843看看編輯;) – mithrop

+0

我沒有完全做出來可以ü解釋我 –

0

我認爲你應該記錄你的代碼以供你低估,哪些數據在哪裏?

並在下面的代碼中,當我刪除的東西,我給予迴應,以便我明白是否刪除或不。

public int deleteAlarm(long unique_id) { 
       db = this.getWritableDatabase(); 
       int delete = db.delete(ALARM_TABLE_NAME, "unique_id=" + unique_id, null); 
       db.close(); 
       return delete; 
     } 
相關問題