Activité Android onResume () et onActivityResult () conflit
-
27-10-2019 - |
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:
- Liste données actualisées à temps avec refreshCategoriesList () (Mais ce n'est pas problème principal);
- 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)?
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();
}