Question

Vous avez un problème. Dans mon activité principale, j'ai un ListView. Et je dois rafraîchir à tout moment je suis revenu à cette activité. J'utilise la méthode onResume () pour cela:

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

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

Comme vous pouvez le voir, j'utiliser un adaptateur rafraîchissant étendu de ArrayAdapter pour changer les données dans ListView.

Mais dans certains cas, j'ai besoin faire défiler cette liste à la fin, par ex. quand j'Ajouter un nouvel élément à lui. Et j'utiliser la méthode onActivityResult (...) pour cela:

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

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

Mais j'ai un problème. Quand j'Ajouter un nouvel élément à la liste les deux ces méthodes exécutées pour onActivityResult (...) et après que onResume (). Et je:

  1. Liste données actualisées à temps avec refreshCategoriesList () (Mais ce n'est pas problème principal);
  2. Après l'exécution de onResume () à la liste de défilement fin restaurée à la première position de l'article :( C'est un problème. Parce que quand j'Ajouter un nouvel élément que je veux DéfilerListe jusqu'à la fin.

Comment puis-je résoudre ce problème. Puis-je appeler dans certains cas seulement onActivityResult (...) méthode (quand je dois à la liste de défilement) et dans une autre méthode onResume () (quand je veux simplement actualiser les données de la liste)?

Était-ce utile?

La solution

Vous pouvez utiliser la méthode notifyDataSetChanged () à partir ArrayAdapter au lieu de recréer l'adaptateur à chaque fois.

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top