2013-06-20 56 views
1

我創建了一個包含5列id,名稱,日期,月份和年份的數據庫。 它正在創建完美,我可以把它放在一個列表視圖。 現在的問題是,當我從數據庫中刪除一條記錄。我不是 能夠獲得正確的行ID(刪除或編輯它)。因爲列表視圖不指向數據庫,只顯示列表視圖中的字符串。通過刪除記錄後單擊列表視圖獲取數據庫中的行ID

有沒有一種方法,我刪除記錄後,我仍然可以得到正確的行ID工作。 我想在列表視圖中單擊時記錄的行ID ..

獲取數據庫中使用的數據功能的5項發送到顯示活動

public ArrayList<String> getData() { 

    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE, 
      KEY_MONTH, KEY_YEAR }; 

    Cursor c = db.query(DATABASE_TABLE, columns, null, null, null, null, 
      null); 
    String result = ""; 

    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iName = c.getColumnIndex(KEY_NAME); 
    int iDate = c.getColumnIndex(KEY_DATE); 
    int iMonth = c.getColumnIndex(KEY_MONTH); 
    int iYear = c.getColumnIndex(KEY_YEAR); 
    ArrayList<String> string_array = new ArrayList<String>(); 
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     result = c.getString(iRow) + " " + c.getString(iName) + "\t\t" 
       + c.getString(iDate) + "\t\t" + c.getString(iMonth) 
       + "\t\t" + c.getString(iYear) + "\n"; 
     string_array.add(result); 

    } 
    return string_array; 
} 

呼籲字符串數組中顯示活動

ArrayList<String> data = db.getData(); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, data); 
    lv.setAdapter(arrayAdapter); 
    lv.setOnItemClickListener(this); 

獲得從數據庫第一元件之後的行ID被刪除

public long getFROWID() { 
    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_DATE, 
      KEY_MONTH, KEY_YEAR }; 

    Cursor c = db.query(DATABASE_TABLE, columns, null, null, null, null, 
      null); 
    c.moveToFirst(); 
    int iRow = c.getColumnIndex(KEY_ROWID); 
    ROWID = c.getString(iRow); 
    long value = Long.parseLong(ROWID); 
    return value; 
} 

功能數據庫中的類來獲取第一行ID記錄是使用簡單的適配器刪除

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View listview, 
     int position, long id) { 
    IMPID = db.getFROWID() + id; 
    openContextMenu(lv); 
    return true; 
} 

更新後

String[] from = { BdayDatabase.KEY_NAME }; 
    int[] to = { R.id.item_name }; 

    List<HashMap<String, String>> listinfo = new ArrayList<HashMap<String, String>>(); 
    listinfo.clear(); 

     HashMap<String, String> hm = new HashMap<String, String>(); 
     hm.put("name" , BdayDatabase.KEY_NAME); 
     listinfo.add(hm); 


    SimpleAdapter adapter = new SimpleAdapter(this, listinfo, R.layout.item_layout, from, to); 
    lv.setAdapter(adapter); 

預先感謝您

回答

0

你爲什麼不使ListView控件綁定到數據庫而不是創建一個數組列表???

這樣你所需要做的就是讓你的主鍵爲_id,它可以正確地綁定到列表視圖。然後當你點擊一行時,long id變量是你在數據庫中點擊的項目的ID

+0

我會試着這樣做......你能指點我一個很好的例子,你知道嗎? 和我發現這個http://stackoverflow.com/questions/4520524/binding-listview-row-with-sqlite-database-for-custom-rows – Eriz

+0

所有你需要做的不是使用'ArrayAdapter',你使用'SimpleAdapter',但是當你這樣做時,我會考慮使用Loaders'與你的數據庫 – tyczj

+0

有沒有辦法,我將能夠讀取...更新您的問題 – tyczj

相關問題