一次一个地在后台线程中添加视图到线性布局,而不是一次完成

时间:2014-01-15 23:06:02

标签: java android multithreading android-view

我有一个线性布局,我正在添加几个视图。考虑结果项的线性布局。最多可能有150个结果项。生成每个视图需要一点点,所以我希望它们在可用时显示出来。

这是我目前的代码:

for (final Dealership loc: locations) {
        final int x = resultNumber;

        view.post(new Runnable(){
            public void run(){
                if(loc != null && parent != null && currentLocation != null) {
                    View v = getResultView(x, loc, parent, currentLocation);

                    v.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));

                    if(parentLayout != null) {
                        parentLayout.addView(v);
                    }
                }
            }
        });
        resultNumber++;
    }

这适用于它在后台运行并添加所有项目。唯一的问题是所有视图在几秒钟后立即出现。如果它们一旦出现就会出现,我真的很喜欢它。

有没有办法可以修改此代码,使其按预期工作?我是以错误的方式解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

似乎不是LinearLayout,而是使用 ListView

ListView会为您提供由某种Collection支持的元素滚动列表(ArrayList等),您可以即时更新该列表。当您从外部资源缓慢聚合数据时,这很有用。

ListView也会在引擎盖下做一些优化,并且只会在屏幕上显示行视图时呈现它们。如果您需要花费一些时间来渲染LinearLayout中的所有150个观看次数,那么ListView也可以为您提供帮助。