如何处理onClick
项目中按钮的ListView
个事件。借助应用程序中的内容提供程序获取数据。实现了自定义SimpleCursorAdapter
但无法从onClick
事件中更新数据库。在下面找到CustomSimpleCursorAdapter
代码。
我正在用android来热身。所以可能是我错过了一些非常简单的东西。任何帮助表示赞赏
public class CustomSimpleCursorAdapter extends SimpleCursorAdapter {
private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final LayoutInflater inflater;
public CustomSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to,int flag) {
super(context, layout, c, from, to,flag);
this.layout = layout;
this.mContext = context;
this.inflater = LayoutInflater.from(context);
this.cr = c;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(layout, null);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
TextView name =(TextView)view.findViewById(R.id.productName_value);
final TextView quantity = (TextView) view.findViewById(R.id.availableInventory_value);
TextView price = (TextView) view.findViewById(R.id.price_value);
TextView sales = (TextView) view.findViewById(R.id.unitsSold_value);
Button sellButton =(Button)view.findViewById(R.id.sellButton);
int name_index = cursor.getColumnIndexOrThrow(InventoryTable.COLUMN_NAME);
int quantity_index = cursor.getColumnIndexOrThrow(InventoryTable.COLUMN_QUANTITY);
int price_index =cursor.getColumnIndexOrThrow(InventoryTable.COLUMN_PRICE);
int sales_index = cursor.getColumnIndexOrThrow(InventoryTable.COLUMN_SALES);
name.setText(cursor.getString(name_index));
quantity.setText(cursor.getString(quantity_index));
price.setText(cursor.getString(price_index));
sales.setText(cursor.getString(sales_index));
Log.i("check before","check ok");
sellButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri prodUri = Uri.parse(MyInventoryContentProvider.CONTENT_URI + "/" + v.getId());
ContentValues values = new ContentValues();
String new_quantity = String.valueOf(Integer.parseInt(quantity.getText().toString()) - 1);
values.put(InventoryTable.COLUMN_QUANTITY,new_quantity);
InventoryUpdateTask().execute(MyInventoryContentProvider.CONTENT_URI.toString(), InventoryTable.COLUMN_QUANTITY, new_quantity, InventoryTable.COLUMN_ID, String.valueOf(v.getId()));
}
});
}
private class InventoryUpdateTask extends AsyncTask<String, Void, Void> {
private MyInventoryContentProvider dbHelper = new MyInventoryContentProvider();
@Override
protected Void doInBackground(String... params) {
ContentValues values = new ContentValues();
values.put(params[1], Integer.parseInt(params[2]));
dbHelper.onCreate();
dbHelper.update(Uri.parse(params[0]), values, params[3], new String[]{params[4]});
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
}