删除其他活动中的列表项后如何刷新主要活动?

时间:2013-10-11 05:03:22

标签: android android-intent android-listview

我在应用程序中有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新手。

2 个答案:

答案 0 :(得分:1)

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

您应该了解有关Activity的LifeCycle的更多信息 http://developer.android.com/training/basics/activity-lifecycle/index.html

答案 1 :(得分:0)

你必须致电

adapter.notifydatasetchanged()

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