2014-03-07 208 views
0

我剛剛使用SQLite與android和我一直在努力,我認爲是一個非常簡單的設計問題。Android SQLite刪除問題

我有一個包含數據行的表,第一項是AUTOINCREMENTED的id。我arrayadapter顯示的數據庫有一個點擊的方法,看起來像這樣:(其傳遞ID到下一個活動)

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      Intent i = new Intent(v.getContext(), InstanceView.class); 
      i.putExtra("InstanceSelected",(int)id); 
      startActivity(i); 
     } 

所以在陣列適配器的ID在接下來的活動中使用,以顯示更多信息數據行。我刪除時出現問題。一旦我刪除了表中的一行,從表到數組適配器的索引就不再正確。

我的DB:

String CREATE_SAT_TABLE = "CREATE TABLE sat (" + 
      "id INTEGER PRIMARY KEY autoincrement, " + 
      "name TEXT, "+ 
      "userid INTEGER") 

我的問題是:

這將是一個更好的方式來做到這一點。我需要能夠在陣列適配器中顯示SQLite表並能夠通過單擊適配器來訪問正確的行。鑑於表的ID和陣列適配器不匹配。

+0

1)如果ID很長,爲什麼在Intent中將它截斷爲「int」?這會使價值發生變化。 2)我不明白你是什麼意思*「基礎知識不再是0」* 3)定義*「不再有效」*。 – m0skit0

+0

你的意思是表格的rowid不是自動分配的嗎?就像刪除第二行一樣,第三行也不會自動成爲第二行。那是你想要完成的嗎? –

+0

我不認爲把它作爲一個整數是一個問題。它在表中只有3個條目中斷。 我的問題是如何填充SQL表中沒有順序行ID的數據適配器,並在單擊時訪問數據。 – UserK

回答

0

假設有表中的多個列中,你可以做的是通過任何其他值在int.putExtras()中。如果你有一個列id爲id,name和dob的表,那麼你可以簡單地傳遞名稱而不是行。如果存在多個名稱相同的問題,那麼您可以要求用戶輸入。

0

你爲什麼不爲你的行模型創建一個POJO?根據您的表

//use getters and setters instead 
public class Sat { 
    public int id; 
    public String name; 
    public int userId; 

    @Override 
    public String toString() { return this.name; } //ListView/GridView item text 
} 

現在從數據庫中讀取錶行填充List<Sat>。 然後你可以使用ArrayAdapter<Sat>,每當你需要使用他們的立場得到一個特定的項目,你可以這樣做:

Sat item = adapter.getItem(position); 
int id = item.id;