【发布时间】:2015-05-14 20:17:18
【问题描述】:
我的问题是我试图从 ListView 中删除项目,为此我在 CustomAdapter 中有一个按钮。
我将此按钮设置为 onClickListener 并尝试使用 Intent 将项目名称传递给主要活动。
在 Main 中,当收到名为“deleteProduct”的意图时,调用方法 deleteProduct,在此方法中,我试图将要删除的产品名称传递给数据库。
我的自定义适配器:
private DbItemDeleteListener deleteListener;
CustomAdapter(Context context, ArrayList<Product> productNames,DbItemDeleteListener deleteListener) {
super(context,R.layout.custom_list_row ,productNames);
this.deleteListener = deleteListener;
}
final Product singleProduct=getItem(position);
final TextView productName=(TextView)customView.findViewById(R.id.ProductName);
final Button CheckButton = (Button)customView.findViewById(R.id.CheckButton);
final Button DeleteButton = (Button)customView.findViewById(R.id.DeleteButton);
DeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String product=singleProduct.get_productname();
deleteListener.delete(product);
}
});
我的主要:
DbItemDeleteListener deleteListener;
ArrayAdapter<Product> adapter;
ArrayList<Product> productnames=new ArrayList<>();
DBHandler dbhandler;
@Override
public void delete(String productId){
dbhandler.deleteProduct(productId);
}
还有我的 DBHandler:
public void deleteProduct(String productname){
SQLiteDatabase db=getWritableDatabase();
db.execSQL("DELETE FROM " +TABLE_PRODUCTS+ " WHERE "+ COLUMN_PRODUCTNAME+ "=\" "+ productname +"\";");
}
当我单击删除按钮时,我也在 logcat 中收到此消息:
Process: com.example.olev.shoppinglist, PID: 1836
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.olev.shoppinglist.DbItemDeleteListener.delete(java.lang.String)' on a null object reference
at com.example.olev.shoppinglist.CustomAdapter$3.onClick(CustomAdapter.java:80)
at android.view.View.performClick(View.java:4756)
【问题讨论】:
-
为什么不直接点击listview按钮删除?
-
因为按钮是使用 CustomAdapter 创建的。
标签: android sqlite listview android-intent