0

我在应用程序中有 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 Activity 的返回按钮,该按钮使用 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(); 
}

这个总数没有更新。项目删除未反映在摘要页面中。尽管如果我添加新费用,显示的总费用就会正确。

请在这里帮助我。我是安卓新手。

4

2 回答 2

1

您应该使用onResume()来更新您的更改,因为 ExpenseSummary 已经创建,返回不会onCreate()再次调用......它将被恢复。

您应该了解更多关于 Activity 的生命周期 http://developer.android.com/training/basics/activity-lifecycle/index.html

于 2013-10-11T05:06:53.283 回答
0

你必须打电话

adapter.notifydatasetchanged()

这会通知所有观察者您的数据集已更改。在活动的 onResume() 中执行此操作。

于 2013-10-11T05:11:39.110 回答