7 Stimmen

Android : Aktivität onviewcreated

Meine Aktivität enthält einige Fragmente in einem LinearLayout (R.id.liste, innerhalb eines ScrollView) und es dauert einige Zeit, bis sie angezeigt werden. Ich habe die Größe des Arrays auf 50 reduziert, zuvor waren es 350. Jedes Fragment ist unabhängig, da ich möchte, dass sie auf Klick reagieren und einen Dialog öffnen.

Hier ist der Code:

long start= System.currentTimeMillis();
for (Item item : dao.getList(triKey, start, end)) {
    ItemFragment fragment = ItemFragment.newInstance(item);
    FragmentTransaction fragTransaction = fragMan.beginTransaction();
    fragTransaction.add(R.id.liste, fragment);
    fragTransaction.commit(); 
}
long time = System.currentTimeMillis()-start;

Echte Frage:

Ich möchte einen kreisförmigen Fortschrittsbalken anzeigen und ihn ausblenden, wenn alle Fragmente angezeigt sind, aber die Aktivität hat keine onViewCreated() Methode, gibt es einen Workaround?

Tiefgreifende, theoretische Frage:

Wenn ich Activity.onCreateView() überschreibe und System.currentTimeMillis() verwende, sehe ich, dass es 7,5 Sekunden dauert, um 50 Fragmente auf meinem Nexus 4 anzuzeigen (und 20s für 350 Fragmente). Da jedes Fragment nur 5 TextViews und 1 ProgressBar enthält und etwa 10-15 ms benötigt, um seine Ansicht zu erstellen, bin ich überrascht, dass es so lange dauert. Warum dauert es fast 6-mal länger, das Fragment hinzuzufügen, als es zu zeichnen?

Ich weiß nicht, welchen Code Sie brauchen, um zu antworten, fragen Sie gerne nach!

Vielen Dank für jede Hilfe!

3voto

Squonk Punkte 48341

Aber die Aktivität hat keine onViewCreated() Methode, gibt es einen Workaround?

Nein.

Mache ich etwas falsch?

Ja.

Sie müssen wirklich Ihr Design überdenken. Sie könnten ganz einfach das, was Sie beschreiben, erreichen, indem Sie entweder eine ListView in Ihrer Aktivität verwenden (ohne ScrollView) oder eine ListView in einem einzigen ListFragment verwenden.

Ein ListView verwendet seine Listenelementansichten erneut, während es scrollt - wenn Sie einen benutzerdefinierten Adapter verwenden, wird er sich so verhalten, wie Sie es möchten, und ist sehr effizient. Sie sollten auch das 'view holder'-Muster betrachten, um das Scrollen noch effizienter zu gestalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X