删除列表视图和数据库中的行

Delete row in listview and database

我设计了一个带有图像、文本和图像删除按钮的自定义列表视图。当我按下 imagebutton 时,我想在 table 数据库中删除 listview 上的这一行并刷新 listview。问题是应用程序没有正确删除 id。示例:table 数据库上的 id 为 1 2 3 4 在列表视图中的位置为 0 1 2 3。删除一行后:id 为 1 2 4,位置为 0 1 2。任何人都可以帮助我正确删除列表视图中的行和数据库然后刷新列表视图,请。这是代码:

  listViewMon.setAdapter(new CartArrayAdapter(ctx, R.layout.single_list_cart, listtao));
    listViewMon.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public String variable;

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, final int position, long l) {
            CartGetSetListView o = (CartGetSetListView) adapterView.getItemAtPosition(position);
            variable = o.getTenmon().toString();

            AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                    CartActivity.this);
            // Setting Dialog Title
            alertDialog.setTitle("XÓA MÓN");
            // Setting Dialog Message
            alertDialog.setMessage("Bạn có muốn xóa " + "[" + variable + "]" + String.valueOf(position) + " khỏi giỏ hàng?");
            // Setting Icon to Dialog
            alertDialog.setIcon(R.drawable.warning);
            // Setting Positive "Yes" Button
            alertDialog.setPositiveButton("YES",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                            db.delete_order("tbl_order", String.valueOf(position + 1));
                            Toast.makeText(CartActivity.this, "Đã xóa: " + variable + String.valueOf(position + 1), Toast.LENGTH_SHORT).show();
                            load_cart();

                        }
                    });

            alertDialog.show();
        }
    });
}

删除行:

    public void delete_order(String table_name, String id) {
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("delete from " + table_name + " where ID_book ='" + id + "'");
}

将 table 中的数据添加到数组列表

 public void load_cart() {

    ctx = this;
    db.querydata("Create table if not exists tbl_order (ID_book integer primary key, IDCH_book integer not null, ID_table integer not null, IDmon_book integer not null, TT_tt text not null, Datetime_book tex not null)");
    Cursor curs = db.getdata("select * from tbl_order, tbl_mon_app where tbl_order.IDmon_book = tbl_mon_app.IDMon");
    int cc = curs.getCount();
    if (curs.moveToFirst()) {

        while (!curs.isAfterLast()) {
            ArrImgUrl.add(curs.getString(curs.getColumnIndex("ImgUrl")));
            curs.moveToNext();
        }
    }
    if (curs.moveToFirst()) {

        while (!curs.isAfterLast()) {
            ArrTenmon.add(curs.getString(curs.getColumnIndex("TenMon")));
            curs.moveToNext();
        }
    }
    if (curs.moveToFirst()) {

        while (!curs.isAfterLast()) {         
            ArrGia.add(curs.getString(curs.getColumnIndex("Gia")));
            curs.moveToNext();
        }
    }

    for (int i = 0; i < cc; i++) {

        listtao.add(new CartGetSetListView(ArrImgUrl.get(i), ArrTenmon.get(i), ArrGia.get(i), "delete1"));

    }
    curs.close();
    db.close();
}

数组适配器:

public class CartArrayAdapter extends ArrayAdapter<CartGetSetListView> {
private int resource;
private LayoutInflater inflater;
private Context context;
URL url;
Bitmap bmp = null;

public CartArrayAdapter(Context ctx, int resourceId, List<CartGetSetListView> objects) {
    super(ctx, resourceId, objects);
    resource = resourceId;
    inflater = LayoutInflater.from(ctx);
    context = ctx;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = (LinearLayout) inflater.inflate(resource, null);
    CartGetSetListView cart = getItem(position);

    ImageView imgMon = (ImageView) convertView.findViewById(R.id.imgMon);
    TextView tenMon = (TextView) convertView.findViewById(R.id.tenMon);
    tenMon.setText(cart.getTenmon());

    ImageButton imgDel = (ImageButton) convertView.findViewById(R.id.Del);
    TextView gia = (TextView) convertView.findViewById(R.id.giaMon);
    gia.setText("Giá: " + cart.getGia() + " vnđ");

    Picasso.with(getContext()).load(cart.getImgurlmon()).fit().into(imgMon);

    String uri1 = "drawable/" + cart.getImgdel();
    int imageResource1 = context.getResources().getIdentifier(uri1, null, context.getPackageName());
    Drawable image1 = context.getResources().getDrawable(imageResource1);
    imgDel.setImageDrawable(image1);

    return convertView;
    }
}

cartgetsetListview

public class CartGetSetListView {
public CartGetSetListView(String imgurlMon, String tenmon, String gia, String imgDel) {
    super();
    this.imgurlmon = imgurlMon;
    this.tenmon = tenmon;
    this.gia = gia;
    this.imgdel = imgDel;
}

private String imgurlmon;
private String tenmon;
private String gia;
private String imgdel;

public String getImgurlmon() {
    return imgurlmon;
}
public void setImgurlmon(String imgurlmon) {
    this.imgurlmon = imgurlmon;
}

public String getTenmon() {
    return tenmon;
}

public void setTenmon(String tenmon) {
    this.tenmon = tenmon;
}

public String getGia() {
    return gia;
}

public void setGia(String gia) {
    this.gia = gia;
}

public String getImgdel() {
    return imgdel;
}

public void setImgdel(String imgdel) {
    this.imgdel = imgdel;
    }
}

在你的adapter中写一个方法 public int getID(int position) return position 中元素的 ID。然后当你从 AdapterView.OnItemClickListener 得到 position 时。通过调用 adapter.getID(position) 获取 ID。我强烈建议不要使用 position+1 来获取用于从数据库中删除行的 ID。删除成功后,可以在adapter上调用notifyDataSetChanged()更新listview。另外,您可能想使用 RecyclerView。它比 ListView

更高效、更强大
  1. 再添加一个变量 bookidCartGetSetListView
  2. 编辑:

    listViewMon.setAdapter(new CartArrayAdapter(ctx, R.layout.single_list_cart, listtao));

    CartArrayAdapter myadapter= new CartArrayAdapter(ctx, R.layout.single_list_cart, listtao) listViewMon.setAdapter(我的适配器);

  3. 编辑

    db.delete_order("tbl_order", String.valueOf(位置 + 1));

 String bookid=myadapter.getItem(position).bookid
 db.delete_order("tbl_order", bookid);