Android Listview pas mise à jour

J'ai un ListView avec un adaptateur personnalisé, affichant des informations à partir d'une base de données. Lorsque je lance l'application, les données sont lues à partir de la base de données, fournies à l'adaptateur, qui est ensuite attaché à ListView. Un LayoutAnimationController est exécuté sur ListView, affichant le contenu en douceur.

this._lvList = (ListView)_v.findViewById(R.id.lvList); this._lvList.setAdapter(new TableAdapter(getActivity(),R.layout.tablerow,Category.getCategories())); LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_left)); lac.setDelay(0.2f); this._lvList.setLayoutAnimation(lac); this._lvList.startLayoutAnimation(); 

Aucun problème du tout.

Maintenant, lorsque je clique sur une entrée de ListView, les entrées qui n'ont pas été cliquées disparaissent, l'entrée cliquée devient la seule entrée dans la liste et s'affiche en haut, comme prévu.

 View v; for(int i = 0;i<_lvList.getChildCount();i++) { v = this._lvList.getChildAt(i); if(v!=clickedView) { Animation animSlideOut = AnimationUtils.loadAnimation(getActivity(), i%2==0?R.anim.slide_out_left:R.anim.slide_out_right); animSlideOut.setStartOffset(i*50); // some more stuff } v.startAnimation(animSlideOut); } 

Cela fonctionne aussi, mais maintenant le problème, si je clique de nouveau sur cette entrée de liste unique, je veux que la liste se repete, affichant à nouveau tous les éléments.

Je pensais pouvoir utiliser le code dès le début (le premier extrait), car il fonctionne bien lors du démarrage de l'application, mais … cette fois … ce n'est pas le cas. Aucune animation ne se produit. La raison en est, il n'y a pas de vues à animer dans mon ListView (sauf celui de l'étape précédente).

Au lieu de créer un nouveau Tableadapter, j'ai déjà essayé de l'effacer, complétez-le, appelé notifyDataSetChanged () … inutilité, comme

 _lvList.getChildCount(); 

Les images fixes renvoient 1 vue, tandis que l'adaptateur contient les 18 entrées. J'ai aussi essayé

 requestLayout(); forceLayout(); invalidate(); invalidateViews(); 

Pour forcer le ListView à générer ses vues enfants avant l'animation, mais cela ne fonctionne pas. Donc, atm the ListView apparaît instantanément, certains après mon appel à l'animation de mise en page.

Sommaire: mon ListView ne contient aucune vue enfant avant le début de l'animation de mise en page, comment puis-je la forcer à les générer?

Thx à l'avance 🙂

  • Comment appliquer l'animation de mise en page Android uniquement aux enfants au-dessus d'un certain index?
  • Comment planter View / ViewGroup - animer la mise en page de manière appropriée?
  • One Solution collect form web for “Android Listview pas mise à jour”

    Hmm … avez-vous déjà fait cela? (au dessous de)

    Dans votre adaptateur personnalisé, remplacer la méthode:

     @Override public View getView(int position, View convertView, ViewGroup parent){ //the position of the item, the convertView is the view layout of what that row is } 

    Pour modifier la façon dont la liste est mise à jour. Cette méthode getView est appelée par Android tous les temps pour rafraîchir la vue (vous ne l'appelez pas manuellement)

    Aussi, je pense que vous devez seulement appeler

    listView.notifiyDataSetChanged() et listView.invalidate() pour forcer la mise à jour, après avoir repeuplé la liste

    Vous pouvez en savoir plus sur les listes ici:

    http://www.vogella.com/articles/AndroidListView/article.html

    http://developer.android.com/guide/topics/ui/layout/listview.html

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.