通过 ListView 和 id 删除数据库项

Delete item of database via ListView and id

我有一个 android 应用程序,其中包含 ListView 和本地 sql 数据库的数据。 现在我想从我的数据库中删除 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;
}

}

使用 ID 和标题创建一个模型 class 并将其存储在列表视图中。例如

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 使用 CursorAdapter。如果是这样,我建议您从 bindView() 中的 Cursor 对象获取 ID。使用 ViewHolder 模式将一些信息附加到您的 ListView 行。

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;
}

因此您可以像在 getView() 方法中一样访问您的项目的 ID。

基本上你的适配器应该有数据,数据应该是要删除的项目的 id,所以我们假设每个适配器都有一个名为 dataArrayList 的数组列表,其中包含你的适配器数据,当我们点击那个按钮时,我们删除了数据库中的项目,所以它看起来像:

 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();
}

创建 POJO class 项目或 id 喜欢

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();