My activity have some fragments in a linearLayout (R.id.liste, inside a scrollView) and it takes some time to show. I reduced the size of the array to 50 but it was first 350. Each fragment is independent since I need them to respond to click and to pop a dialog up.
Here is the 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;
I would like to show a circle progressBar and set it Gone when all fragments are shown, but Activity doesn't have a onViewCreated() method, is there any workaround ?
If I override Activity.onCreateView() and use the System.currentTimeMillis(), I see that it takes 7.5 seconds to show 50 fragments on my Nexus 4 (and 20s for 350 fragments). Since each fragment only holds 5 TextViews and 1 ProgressBar and takes like 10-15ms to create its view, I'm surprised it takes so long, why does it take nearly 6x more time to add the fragment than to draw it ?
I dont know which piece of code you would need to answer, feel free to ask of course !
Thank you very much for any help !
but Activity doesn't have a onViewCreated() method, is there any workaround ?
No.
am I doing something wrong ?
Yes.
You really need to rethink your design. You could easily do what you're describing by using a ListView
either in your Activity
(without using ScrollView
) or use a ListView
in a single ListFragment
.
A ListView
re-uses its list item views as it scrolls - if you use a custom Adapter
it will behave as you want and is very efficient. You may also want to look at the 'view holder' pattern to making scrolling even more efficient.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With