2016-04-11 17 views
0

這是一個非常具體的情況,所以我會盡我所能來適當組織這個問題。我有一個自定義ViewGroup正在爲我的目的工作,但它的初始化導致跳幀。Android的ViewGroup使用

我的應用程序包含一個ViewPagerFragment的每個父容器是一個ScrollView。在這些之中,我有很多不同的觀點,其中一個是包含垂直行自定義視圖(用於操縱數據集)的LinearLayout。見圖片「前臺,可見,二級應用」

此佈局,我已經擴展LinearLayout,每一個在運行時填充,從充氣XML每一個孩子。

它工作正常,問題是,在運行時對所有這些子視圖充氣會導致跳幀。我使用方法跟蹤來發現每個LayoutInflater.inflate()的呼叫正在平均4-6毫秒。在我的所有包含一個或多個這些列表的片段之間,它在啓動時會加入大量(40-50)跳幀。

手動創建子視圖而不是膨脹提高了一點,但還不夠。仍然非常明顯的跳幀。

它需要某種形式的重複使用,類似於ListView所做的。

我看到一個解決方案,儘管它看起來並不理想。 即用多種視圖類型替換片段容器ScrollViewListView

一些問題,我這個看到的是

  • 它需要的意見上,下之間長達5-6個不同視圖類型,這些列表之間。似乎寫得很亂。
  • 每個子視圖都需要能夠通過簡單的展開/摺疊動畫來垂直擴展大小。不知道這是甚至可能與ListView行有關。
  • 它涉及重寫幾乎整個應用程序。我願意做但願儘可能避免。

我不知道是不是在所有可能的事:

  • 使用LinearLayout這些列表代替,使用ListView,並且具有其尺寸擴大到顯示所有項目。它將嵌套在父項ScrollView中。如果它的大小擴展到所有項目,它甚至會重用任何視圖嗎?

在這種情況下是否還有其他類型的容器?我還沒有使用新的RecyclerView,但從我讀過的內容看來,它基本上與ListView相同。

基本上我想創建的是回收視圖的LinearLayout

希望有任何建議。請讓我知道,如果這個問題不能很好地閱讀,我可以添加更多的信息或郵政編碼,如果需要的話。我意識到我在這裏要做的事情有點不合常規,並且可能由於設計本身存在缺陷。但我對目前的介紹感到非常滿意,並希望保持這種狀態。

回答

0

從我的理解你有可點擊的標題視圖,當點擊一個內部佈局顯示/隱藏。

因此,您可以在沒有內部佈局的情況下讓視圖充氣。只需點擊標題即可。然後,當點擊標題時,如果相應的內部佈局尚未膨脹,那麼您就會膨脹它。否則,你顯示/隱藏它。這應該從最初的通貨膨脹中節省很多時間。也可以在運行時以編程方式構建佈局而不是膨脹xml,因爲您不必使用費用相當高的findViewById()方法,因此也可節省大量時間。

+0

很棒的建議。我會盡快完成這個嘗試。 –

+0

如果它幫助你解決你的問題,請將答案標記爲已接受。 – Anonymous

+0

我仍然有框架跳過這個。我有另一個想法,在工作線程中誇大這些視圖,並在'onPostExecute'中附加到父項。它在我的設備上完美運行,這樣做有什麼問題嗎? –