Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过ListView和id删除数据库项_Android_Sqlite_Android Listview - Fatal编程技术网

Android 通过ListView和id删除数据库项

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<?>

我有一个android应用程序,它有一个
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();