Pergunta

Tenha um problema. Na minha principal atividade Eu tenho um ListView. E eu preciso atualizá-la a qualquer momento eu voltei para esta atividade. I usar o método onResume () para isso:

@Override
protected void onResume() {
    super.onResume();
    refreshCategoriesList();
}

private void refreshCategoriesList() {
        // ...
        categoriesListAdapter = new CategoryListItemAdapter(
            this, R.layout.category_item,
            categories
        );
        categoriesListView.setAdapter(categoriesListAdapter);
}

Como você pode ver eu uso refrescante adaptador estendido de ArrayAdapter para alterar dados no ListView.

Mas em alguns casos eu preciso percorrer esta lista até o fim, por ex. quando eu adicionar novo item a ele. E eu uso onActivityResult (...) método para isso:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // ...
        refreshCategoriesList();

        categoriesListView.setSelection(categoriesListAdapter.getCount() - 1);
}

Mas eu tenho um problema. Quando eu adicionar novo item à lista ambos estes métodos executados em onActivityResult ordem (...) e depois disso onResume (). E eu tenho:

  1. Os dados de lista atualizada para vezes com refreshCategoriesList () (Mas não é principal problema);
  2. Após a execução de onResume () rolada para lista final recuperada a posição primeiro item :( É um problema. Porque quando eu adicionar novo item eu quero lista de rolagem até o fim.

Como posso resolver este problema. Posso, em alguns casos chamam única onActivityResult (...) método (quando eu preciso lista de rolagem) e em outra onResume () método (quando eu simplesmente querem atualizar os dados de lista)?

Foi útil?

Solução

Você pode usar notifyDataSetChanged () método de ArrayAdapter em vez de recriar adaptador de cada vez.

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top