Android 通过ListView和id删除数据库项
我有一个android应用程序,它有一个Android 通过ListView和id删除数据库项,android,sqlite,android-listview,Android,Sqlite,Android Listview,我有一个android应用程序,它有一个ListView和我本地sql数据库的数据。 现在我想从我的数据库中删除一个ID为的项目 我想长按任何一行,这应该会删除该项目 ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?>
ListView
和我本地sql
数据库的数据。
现在我想从我的数据库中删除一个ID为的项目
我想长按任何一行,这应该会删除该项目
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// DELETE ACTION
}
创建一个带有id和标题的模型类,并在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
}
ListView.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
int id=list.get(postion.getId();//您可以像这样获取id
}
我建议您在列表视图中使用CursorAdapter
。如果是这样,我建议您从bindView()
中的Cursor
对象获取id。使用ViewHolder模式将一些信息附加到列表视图
行
class ViewHolder{
TextView text;
ImageView image;
...
long id;}
向其添加长id并在长时间单击时检索。让适配器实现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;
}
公共类DatabaseListAdapter扩展BaseAdapter实现AdapterView.OnItemLongClickListener{
...
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
long itemID=databaseList.get(position.getID();
//执行删除
返回true;
}
因此,您可以像在getView()中一样访问项目的ID方法。基本上,您的适配器中应该有数据,该数据应该是要删除的项的id
,因此我们假设每个适配器都有一个名为dataArrayList
的arraylist,其中包含适配器数据,当我们单击该按钮时,我们会在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();
}
创建项目或类似id的POJO类
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>();
ArrayList<String> mItem = new ArrayList<String>();
ArrayList<String> mId = new ArrayList<String>();
mId.get(position);
mId.remove(position);
mItem.remove(position);
notifyDatasetChange();