有一个问题。在我的主要活动中,我有一个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()之后执行。我有:


使用refreshCategoriesList()将列表数据刷新到一定时间(但这不是主要问题);
在执行onResume()后,滚动到结束列表恢复到第一项位置:(这是一个问题。因为当我添加新项时,我想滚动列表到末尾。


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

最佳答案

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

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

10-08 00:26
查看更多