有一个问题。在我的主要活动中,我有一个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();
}