2013-09-25 143 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