2013-09-25 42 views
6

我需要在循环中添加大量视图,而这个片段可以做到这一点,应用程序还将有一个导航抽屉和操作栏,用户可以在其中进行操作。android addView在后台线程

所以我想这个过程不要a)通过阻止用户减慢应用程序,b)最好在后台线程中添加视图。

困境是,我认为Android不喜欢在非UI线程中添加视图,那么是否有最佳做法呢?我打算在片段的视图中显示进度栏视图对象,其余视图正在使用addView和关联计算生成。

+0

你能详细说明你在做什么吗?即你正在添加什么样的观点?我的猜测是一些adapterview变体会起作用。 – JoeyG

+2

“是否有最佳做法?” - 首先没有“很多观点”。 – CommonsWare

回答

17

而不是在后台线程上添加视图,您可以通过发布几个Runnables在UI线程上。下面的代码是该技术的一个高度简化的版本,但它类似于它在Android的Launcher应用程序中的工作方式:

private void createAndAddViews(int count} { 
    for (int i = 0; i < count; i++) { 
     // create new views and add them 
    } 
} 

Runnable r = new Runnable() { 
    public void run() { 
     createAndAddViews(4); // add 4 views 
     if (mMoreViewsToAdd) mTopLevelView.post(this); 
    } 
}; 

mTopLevelView.post(r); 
+2

我不明白。 。 。我有5个LinearLayouts来填充大量的项目..我如何添加视图不会使我的ProgressBar在可运行完成之前可见,而不会滞后。 – Sheychan