2012-01-11 100 views
2

有问题。在我的主要活动中,我有一个ListView。我需要刷新它,只要我回到这个活动。我使用的onResume()方法是:Android Activity onResume()和onActivityResult()冲突

@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()方法时(当我只是想刷新列表数据)?

+1

每次刷新时都不应该创建新的适配器。你尝试类似categoriesListAdapter.notifyDataSetChanged()? – 2012-01-11 22:04:37

回答

2

您可以使用notifyDataSetChanged )方法而不是每次重新创建适配器。

private void refreshCategoriesList() { 
    categoriesListAdapter.notifyDataSetChanged(); 
} 
相关问题