Ich habe ein ListView mit einem benutzerdefinierten Adapter, der Informationen aus einer Datenbank anzeigt. Wenn ich die App starte, werden die Daten aus der Datenbank gelesen und an den Adapter übergeben, der dann an die ListView angehängt wird. Ein LayoutAnimationController wird auf dem ListView ausgeführt und zeigt den Inhalt problemlos an.Android Listview nicht aktualisieren
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();
Kein Problem.
Wenn ich jetzt auf einen Eintrag der ListView klicke, verschwinden die Einträge, auf die nicht geklickt wurde, der angeklickte Eintrag wird der einzige Eintrag in der Liste und wird wie erwartet oben angezeigt.
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);
}
Dies funktioniert auch, aber jetzt ist das Problem, wenn ich auf diesem einzelnen Listeneintrag wieder klicken, möchte ich die Liste neu zu besiedeln, die Anzeige wieder alle Einzelteile.
Ich dachte, ich könnte den Code von Anfang an verwenden (das erste Snippet), wie es beim Starten der App funktioniert, aber ... dieses Mal ... es nicht. Keine Animation passiert. Der Grund dafür ist, dass in meiner ListView keine Ansichten zu animieren sind (mit Ausnahme der aus dem vorherigen Schritt).
Statt ein neues Tableadapter zu schaffen habe ich schon versucht, es zu löschen, füllen Sie es neu, genannt notifyDataSetChanged() ... nichts, als
_lvList.getChildCount();
Stills gibt 1 zurück Ansicht, während der Adapter alle 18 hält Einträge. Ich versuchte auch
requestLayout();
forceLayout();
invalidate();
invalidateViews();
das Listview zu zwingen, seine untergeordneten Ansichten vor der Animation zu erzeugen, aber es funktioniert nicht. So atm erscheint das ListView sofort, irgendwann nach dem Aufruf der Layoutanimation.
Zusammenfassung: Meine ListView enthält keine Kinderansichten vor dem Start der Layoutanimation, wie kann ich es zwingen, sie zu generieren?
Thx im Voraus :)
haben Sie das Problem gelöst? – dexxtr
@dexxtr Sorry, das war eine lange Zeit her, aber am Ende habe ich mich mit einer anderen Animation, als der Code nicht wie erwartet funktioniert ... –
Ich habe bereits behoben :) das Problem war in falschem Kontext, der Verweis auf einen anderen Bildschirm – dexxtr