【问题标题】:How to refresh main activity after deleting a list item in another activity?删除另一个活动中的列表项后如何刷新主要活动?
【发布时间】:2013-10-11 05:03:22
【问题描述】:

我在应用中有 3 个活动,即 ExpenseSummary、AddExpense、ExpenseList。

我正在使用光标适配器来填充费用列表。

这是来自 ExpenseCursorAdapter 的代码 sn-p

        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(); 
}

此总数未更新。项目删除未反映在摘要页面中。 虽然如果我添加新费用,显示的总费用就会正确。

请帮帮我。我是 Android 新手。

【问题讨论】:

    标签: android android-intent android-listview


    【解决方案1】:

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

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

    【讨论】:

    • 我已经在 onResume() 中添加了代码。它似乎没有帮助。我哪里做错了?
    • 谢谢。我忘了调用 super.onResume()。
    【解决方案2】:

    你必须打电话

    adapter.notifydatasetchanged()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多