通过 ListView 和 id 删除数据库项
Posted
技术标签:
【中文标题】通过 ListView 和 id 删除数据库项【英文标题】:Delete item of database via ListView and id 【发布时间】:2016-03-14 18:12:03 【问题描述】:我有一个带有ListView
和我本地sql
数据库数据的android 应用程序。
现在我想用 ID 从我的数据库中删除一个项目。
我想长按任何一行,这应该会删除该项目。
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
// DELETE ACTION
但是如何获取我的数据库的项目 ID?
目前,我使用查询将 ID 保存在隐藏的 TextView
中,并通过 findviewbyid()
获取此 ID。
但这是正确的方法吗?
适配器:
public class DatabaseListAdapter extends BaseAdapter
Context context;
ArrayList<DatabaseListItems> databaseList;
public DatabaseListAdapter(Context context, ArrayList<DatabaseListItems> list)
this.context = context;
databaseList = list;
@Override
public int getCount()
return databaseList.size();
@Override
public Object getItem(int position)
return databaseList.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup arg2)
DatabaseListItems databaseListItems = databaseList.get(position);
if (convertView == null)
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.custom_listview_item, null);
TextView tvID = (TextView) convertView.findViewById(R.id.txtViewID);
tvID.setText(databaseListItems.getID());
return convertView;
【问题讨论】:
【参考方案1】:让您的适配器实现 onItemLongClickListener。
public class DatabaseListAdapter extends BaseAdapter implements AdapterView.OnItemLongClickListener
...
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
long itemID = databaseList.get(position).getID();
//Perform delete
return true;
因此,您可以像在 getView() 方法中一样访问项目的 ID。
【讨论】:
【参考方案2】:创建一个带有 id 和 title 的模型类,并在 listview 中进行排序。例如。
public class Data
private int id;
private String title;
public Data(int id,String title)
this.id = id;
this.title = title;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getTitle()
return title;
public void setTitle(String title)
this.title = title;
在您填写列表视图的位置执行此操作
list.add(new Data(1,"xyz"))
所以在点击事件里面
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
int id = list.get(posttion).getId(); //you can get id like this
【讨论】:
【参考方案3】:我建议您使用CursorAdapter
作为您的ListView
。如果是这样,我建议您从bindView()
中的Cursor
对象获取id。使用 ViewHolder 模式将一些信息附加到您的 ListView
行。
class ViewHolder
TextView text;
ImageView image;
...
long id;
为其添加长ID并在长按时检索它。
【讨论】:
【参考方案4】:基本上您的适配器应该有数据,该数据应该是要删除的项目的id
,因此我们假设每个适配器都有一个名为dataArrayList
的数组列表,其中包含您的适配器数据,当我们单击该按钮时我们删除了 db 中的项目,所以它看起来像:
deletebtn.setOnItemLongClickListener(->(position)
Contact mContact = dataArrayList.get(position).getContact();
deleteContact(mContact);
//adapter this then we can remove the listview adapter row whose data
//we just deleted in the db
arrayAdapter.getItem(position);
arrayAdapter.remove(toRemove);
arrayAdapter.notifyDatasetChange();
//finally we want to remove the arraylist data too from it
dataArrayList.remove(position);
//Our Delete method in our database class
public void deleteContact(Contact contact)
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] String.valueOf(contact.getID()) );
db.close();
【讨论】:
【参考方案5】:创建 POJO 类的 item 或 id like
class info
private String item;
private int id;
info(String item,int id)
this.item = item;
this.id = id;
public setId(int id)
this.id=id;
public setItem(String item)
this.item=item;
public int getId()
return id;
public String getItem()
return item;
并将对象存储到 ArrayList 中,以便您可以获取具有位置的特定项目的 ID
ArrayList.get(position).getId();
ArrayList.remove(position);
notifyDatasetChange();
或
简单你创建两个 ArrayList 之类的
ArrayList<String> mItem = new ArrayList<String>();
ArrayList<String> mId = new ArrayList<String>();
然后您可以获取特定位置的 id 并从 arraylist 中删除它们
mId.get(position);
mId.remove(position);
mItem.remove(position);
notifyDatasetChange();
【讨论】:
以上是关于通过 ListView 和 id 删除数据库项的主要内容,如果未能解决你的问题,请参考以下文章