2

有一个问题。在我的主要活动中,我有一个 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() 后滚动到结束列表恢复到第一个项目位置:(这是一个问题。因为当我添加新项目时,我希望滚动列表到最后。

我该如何解决这个问题。我可以在某些情况下只调用 onActivityResult(...) 方法(当我需要滚动列表时)和其他 onResume() 方法(当我只想刷新列表数据时)吗?

4

1 回答 1

2

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

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
于 2012-05-08T15:24:53.630 回答