2015-04-22 97 views
1

我有一個listview從Arraylist獲取數據,這個Arraylist從數據庫獲取數據。現在我想從列表視圖中刪除一個項目,並且我想從數據庫中刪除這個記錄。另外,刪除選項位於上下文菜單中。我只想知道如何將記錄的Id發送到listview項目以及dataModel中的delete方法。我可以通過reslist.getId()從Android的ListView和數據庫中刪除一個項目

這裏是getView和文本菜單的ID:

 public View getView(int i, View view, ViewGroup viewGroup) { 

     View v = view; 

     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService 
        (Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.list_layout, null); 

     } 

     TextView tv1 = (TextView) v.findViewById(R.id.resName); 
     TextView tv2 = (TextView) v.findViewById(R.id.resAddress); 
     ImageView iv = (ImageView) v.findViewById(R.id.resType); 

     tv1.setText(resList.get(i).getName()); 
     tv2.setText(resList.get(i).getAddress()); 
     iv.setImageResource(R.drawable.tpng); 

     if(resList.get(i).getType().equals("takeaway")){ 
      iv.setImageResource(R.drawable.tpng); 
     }else if(resList.get(i).getType().equals("delivery")){ 
      iv.setImageResource(R.drawable.dpng); 
     }else if(resList.get(i).getType().equals("sitdown")){ 
      iv.setImageResource(R.drawable.spng); 
     } 

     registerForContextMenu(v); 

     return v; 
    } 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 

    getMenuInflater().inflate(R.menu.list_menu, menu);  
    super.onCreateContextMenu(menu, v, menuInfo); 
    } 

    public boolean onContextItemSelected(MenuItem item) { 

    switch(item.getItemId()){ 
    case R.id.remove: 
     // I should use delete method here and I just want Item Id 
     break; 
    case R.id.item2: 

     break; 


    } 

    return super.onContextItemSelected(item); 
    } 

,這是在數據模型的刪除方法

 public void deleteRestaurant(int id){ 
    SQLiteDatabase db = getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_RESTAURANT + "WHERE" + KEY_ID + " = ?", new String[] {String.valueOf(id)}); 
} 
+0

看看這個鏈接http://stackoverflow.com/questions/18632331/using-contextmenu-with-listview-in-android –

回答

0

如果您使用與您的CursorLoader適配器,你所要做的就是刪除數據庫中的行,其餘的將自動發生。

這裏是一個鏈接:Loaders

1

從SQLite數據庫中刪除記錄,你可以使用下面的代碼:

public void deleteRestaurant(int id) { 
System.out.println("the deleted restaurant has the id: " + id); 
SQLiteDatabase db = getWritableDatabase(); 
db.delete(TABLE_RESTAURANT, KEY_ID + " = " + id, null); 
} 

入住這完全教程約how to use SQLite Database with Multiple Tables in Android

0

你需要獲取所選項目的位置。然後從您的陣列列表中刪除項目。一旦你刪除了該項目,調用notifyDataSetChanged方法,然後它會自動刪除該視圖。

switch(item.getItemId()){ 
case R.id.remove: 
    // I should use delete method here and I just want Item Id 
    deleteRestaurant(id); 
    arrayList.remove(position); 
    notifyDataSetChanged(); 
    break; 
case R.id.item2: 

    break; 
+0

我怎樣才能得到這個職位? –

相關問題