2012-01-11 3 views
2

Имейте проблему. В моей основной деятельности у меня есть ListView. И мне нужно обновить его в любое время, когда я вернусь к этой Деятельности. Я использую метод onResume() для этого:Активность Android 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

Вы не должны создавать новый адаптер при каждом обновлении. Что вы пытаетесь что-то вроде категорийListAdapter.notifyDataSetChanged()? –

ответ

2

Вы можете использовать notifyDataSetChanged () от ArrayAdapter, а не для воссоздания адаптера каждый раз.

private void refreshCategoriesList() { 
    categoriesListAdapter.notifyDataSetChanged(); 
} 
Смежные вопросы