我在应用程序中有3个活动,即ExpenseSummary,AddExpense,ExpenseList。
我正在使用游标适配器填充费用清单。
以下是ExpenseCursorAdapter的代码片段
Button deleteItem=(Button)view.findViewById(R.id.deleteItem);
deleteItem.setTag(cursor.getString(cursor.getColumnIndex(ExpenseEntry.COLUMN_NAME_ID)));
final ExpenseTrackerDBHelper db_helper = new ExpenseTrackerDBHelper(context);
deleteItem.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
deleteRecordWithId(itemId);
cursor.requery();
notifyDataSetChanged();
}
private void deleteRecordWithId(String itemId) {
String selection = ExpenseEntry.COLUMN_NAME_ID + " = ?";
// Specify arguments in placeholder order.
String[] selectionArgs = { String.valueOf(itemId) };
// Issue SQL statement.
SQLiteDatabase db = db_helper.getWritableDatabase();
db.delete(ExpenseEntry.TABLE_NAME, selection, selectionArgs);
}
});
当我尝试删除某个项目时,它会从列表中删除。虽然我不确定它是否会从数据库中删除。
现在,如果单击显示EspenseSummary活动的后退按钮,它会在on_create方法中使用以下代码显示所有费用的总和。
public void showExpenseTotal(){
ExpenseTrackerDBHelper mDbHelper = new ExpenseTrackerDBHelper(this);
SQLiteDatabase db = mDbHelper.getReadableDatabase();
long total_expense = 0;
Cursor cursor;
cursor = db.rawQuery("SELECT SUM(amount) FROM Expenses;", null);
cursor.moveToFirst();
total_expense = cursor.getLong(0);
String total = Long.toString(total_expense);
expenseTotal.setText(total.toString());
}
更新
protected void onResume(Bundle savedInstanceState) {
showExpenseTotal();
}
此总数未更新。项目删除未在摘要页面中反映。 虽然如果我添加新费用,显示的总数就会变得正确。
请在这里帮助我。我是Android新手。
答案 0 :(得分:1)
您应该使用onResume()
更新您的更改,因为已经创建了ExpenseSummary,返回时不会再次调用onCreate()
..它将会恢复。
您应该了解有关Activity的LifeCycle的更多信息 http://developer.android.com/training/basics/activity-lifecycle/index.html
答案 1 :(得分:0)
你必须致电
adapter.notifydatasetchanged()
这会通知所有观察者您的数据集已更改。在您活动的onResume()中执行此操作。