Android Activity onResume()和onActivityResult()发生冲突

时间:2012-01-11 22:00:19

标签: android listview android-activity onresume

有问题。在我的主Activity中我有一个ListView。每次我回到此活动时,我都需要刷新它。我使用onResume()方法:

@Override
protected void onResume() {
    super.onResume();
    refreshCategoriesList();
}

private void refreshCategoriesList() {
        // ...
        categoriesListAdapter = new CategoryListItemAdapter(
            this, R.layout.category_item,
            categories
        );
        categoriesListView.setAdapter(categoriesListAdapter);
}

如您所见,我使用从ArrayAdapter扩展的刷新适配器来更改ListView中的数据。

但在某些情况下,我需要将此列表滚动到最后,例如。当我添加新项目时。我使用onActivityResult(...)方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // ...
        refreshCategoriesList();

        categoriesListView.setSelection(categoriesListAdapter.getCount() - 1);
}

但我有一个问题。当我将新项目添加到我的列表中时,这两个方法按顺序执行onActivityResult(...),然后执行onResume()。我有:

  1. 列表数据使用refreshCategoriesList()刷新次数(但这不是主要问题);
  2. 执行onResume()后滚动到结束列表恢复到第一个项目位置:(这是一个问题。因为当我添加新项目时我想要滚动列表到最后。
  3. 如何解决此问题。我可以在某些情况下只调用onActivityResult(...)方法(当我需要滚动列表时)和其他onResume()方法(当我只想刷新列表数据时)吗?

1 个答案:

答案 0 :(得分:2)

您可以使用ArrayAdapter中的notifyDataSetChanged()方法,而不是每次都重新创建适配器。

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}