从Android的ListView和数据库中删除一个项目

问题描述:

我有一个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 –

如果您使用与您的CursorLoader适配器,你所要做的就是删除数据库中的行,其余的将自动发生。

这里是一个链接:Loaders

从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

你需要获取所选项目的位置。然后从您的阵列列表中删除项目。一旦你删除了该项目,调用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

我怎样才能得到这个职位? –