2017-05-07 71 views
-2

我在我的应用程序中创建购物车。我正在使用sqlite将值存储在表中以检索此人添加的内容。使用SQLITE删除自定义列表视图中的行

我已经为每一行添加了一个按钮,以便当他们单击该按钮时,它将从列表中删除该行及其数据。

但是如何在点击按钮时调用我的删除功能?提前致谢!

这是我的适配器类:

public class ListCartAdapter extends BaseAdapter { 

private Context context; 

private ArrayList<String> orderid; 
private ArrayList<String> orderName; 
private ArrayList<String> orderSize; 
private ArrayList<String> orderQuantity; 

public ListCartAdapter(Context context, ArrayList<String> orderid, ArrayList<String> orderName, ArrayList<String> orderSize, ArrayList<String> orderQuantity){ 
    // public ListCartAdapter(Context context, ArrayList<String> orderName){ 
    this.context = context; 
    this.orderid = orderid; 
    this.orderName = orderName; 
    this.orderSize = orderSize; 
    this.orderQuantity = orderQuantity; 


} 

@Override 
public int getCount() { 
    return orderName.size(); 
} 

@Override 
public Object getItem(int position) { 
    return orderName.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View listView; 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listView = inflater.inflate(R.layout.cart_list_item, null); 

    TextView number = (TextView) listView.findViewById(R.id.textID); 
    TextView name = (TextView) listView.findViewById(R.id.textOrderName); 
    TextView size = (TextView) listView.findViewById(R.id.textOrderSize); 
    TextView quantity = (TextView) listView.findViewById(R.id.textOrderQuantity); 

    ImageButton btnRemove = (ImageButton) listView.findViewById(R.id.btnRemove); 

    number.setText(orderid.get(position)); 
    name.setText(orderName.get(position)); 
    size.setText(orderSize.get(position)); 
    quantity.setText(orderQuantity.get(position)); 

    //BUTTON TO REMOVE ROW 
    btnRemove.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      orderName.remove(position); 
      notifyDataSetChanged(); 

     } 
    }); 

    return listView; 
} 

,这是我的SQLITEHELPER CLASS:

public static final String DB_NAME = "CartDB"; 
public static final String TABLE_NAME = "Orders"; 
public static final String COLUMN_ID = "id"; 
public static final String NAME ="name"; 
public static final String SIZE ="size"; 
public static final String QUANTITY ="quantity"; 

private static final int DB_VERSION = 1; 

public cartDatabaseHelper(Context context) 
{ 
    super(context,DB_NAME,null,DB_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    String sql = "CREATE TABLE " + TABLE_NAME 
      + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + NAME + " VARCHAR, " 
      + SIZE + " VARCHAR, " 
      + QUANTITY + " VARCHAR);"; 

       db.execSQL(sql); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    String sql = "DROP TABLE IF EXIST Orders"; 
    db.execSQL(sql); 
    onCreate(db); 
} 

public boolean addPerson(String name, String size, String quantity){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 

    contentValues.put(NAME,name); 
    contentValues.put(SIZE,size); 
    contentValues.put(QUANTITY,quantity); 

    long result = db.insert(TABLE_NAME,null ,contentValues); 
    if(result == -1) 
     return false; 
    else 
     return true; 
} 


public Cursor getListContents(){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 
    return data; 
} 


public void removeSingleContact(String id) { 
    SQLiteDatabase database = this.getWritableDatabase(); 

    database.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + "= '" + id + "'"); 

    //Close the database 
    database.close(); 
} 
+1

'“WHERE” + COLUMN_ID +“= '“+ id +”'“);'id是** INTEGER **。不要把它看作是** STRING **。 –

+0

@Rotwang好的,先生,我会牢记这一点。你认为我会如何解决这个问题先生? –

+1

另外,sql注入是不好的。了解'database.delete'方法 –

回答

0

嗯,我解决我的问题:DI仍然不知道为什么我downvoted,但谁问津。

这是打电话给你SqliteHelper在适配器类的方式,添加以下代码

final cartDatabaseHelper db = new cartDatabaseHelper(context); 

我希望这可以帮助其他人解决这个问题:d

相关问题