2016-04-21 62 views
2

ViewHolder模式的用途是幫助回收視圖。如果在我的列表中,我對每一行都有不同的佈局。在我的情況下,我有一個GridView兩行6個元素。每個元素都有完全不同的佈局,並提供其他內容。在這種情況下,我是否應該繼續執行ViewHolder何時不使用ViewHolder模式?

+0

在所有時刻都能看到6個視圖嗎? – jobbert

+0

@jobbert好吧,其中4個是。他們每10秒刷新一次。 – Booyaches

回答

2

調用findViewbyId()方法一直在佈局中引用窗口小部件會顯着降低應用程序的性能。爲了平滑滾動ListViewRecyclerView,需要使用ViewHolder,這減少了參考時間並有助於平滑滾動。

根據你的問題,如果你對每一行有不同的佈局,那麼你需要爲每個佈局創建單獨的ViewHolder對象。然後,在您將數據充入其中時,您需要確定您需要爲當前位置使用哪個ViewHolder。這可能會使你的代碼有點複雜,但它大大提高了應用程序的性能。

有關ViewHolder更多信息,請訪問以下鏈接:Hold View Objects in a View Holder

+0

請參閱http://daniel-codes.blogspot.com/2013/11/is-findviewbyid-slow.html,'findViewbyId'不會''顯着減慢應用程序性能「 - 實際上沒有Google的android.widget .ListAdapter的使用查看模式 – pskink

+0

檢查我在上面的答案中提供的文檔的鏈接。在文檔中,寫道findViewById()會降低應用程序的性能。 –

+0

那麼告訴我,如果Google傢伙不關心性能,因爲它們的ListAdapter都不實現該模式? – pskink

1

的ListView保證在正確的convertview通過該類型,當你重寫geitemviewtype數據。 GetTag也可以在多種視圖類型下正常工作,並且仍然會阻止始終調用getItemById,從而提高性能。所以在我看來:是的,你仍然應該使用視圖模式。

相關問題