6

我的活动在线性布局中有一些片段(R.id.liste,在滚动视图内),需要一些时间才能显示。我将数组的大小减小到 50,但它首先是 350。每个片段都是独立的,因为我需要它们响应点击并弹出一个对话框。

这是代码:

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;

真正的问题:

我想显示一个圆形进度条并在显示所有片段时将其设置为 Gone,但 Activity 没有 onViewCreated() 方法,有什么解决方法吗?

更深层次的理论问题:

如果我重写 Activity.onCreateView() 并使用 System.currentTimeMillis(),我发现在我的 Nexus 4 上显示 50 个片段需要 7.5 秒(350 个片段需要 20 秒)。由于每个片段只包含 5 个 TextViews 和 1 个 ProgressBar 并且需要 10-15 毫秒来创建它的视图,我很惊讶它需要这么长时间,为什么添加片段比绘制它需要近 6 倍的时间?

我不知道您需要回答哪一段代码,当然可以随意询问!

非常感谢您的帮助!

4

1 回答 1

3

但是 Activity 没有 onViewCreated() 方法,有什么解决方法吗?

不。

难道我做错了什么 ?

是的。

你真的需要重新考虑你的设计。您可以通过ListView在您的Activity(不使用ScrollView)中使用 a 或ListView在单个ListFragment.

AListView在滚动时重复使用其列表项视图 - 如果您使用自定义Adapter,它将按照您的意愿运行并且非常有效。您可能还想查看“视图持有者”模式以提高滚动效率。

于 2014-08-26T10:59:17.180 回答