2015-04-01 37 views
0

在大多數情況下,我們需要爲列表視圖的動態項目內容實現BaseAdapter的getItemViewType()和getViewTypeCount(),如this post所述。但我認爲這個解決方案只適用於有限數量並且事先知道,比如帶有發送佈局和接收佈局的列表視圖項目。Android:如果ListView中的項目內容是動態的,那麼實現BaseAdapter的最佳方式是什麼?

如果事先不知道其項目內容的列表視圖,那麼情況如何呢? 例如,我需要顯示一個來自服務器的聯繫人列表,聯繫人列表大小約爲幾千。對於每個項目,我需要顯示,例如,愛好「列表」。它是一個0到幾十個字符串的小範圍。因此,在這種情況下:

  1. 的項目類型是使用「getItemViewType」
  2. 雖然每個項目可以是不同的比正常情況下相對較大,但類似於一定程度:該項目的內容是在數量不同視圖,但在視圖類型中很常見。項目A與項目B的區別僅在於它具有更多的TextView。

enter image description here

對於在getView每一次,convertview很難簡單地重用,因爲它們是不同的,但如果我們創建新的TextView並將其添加到convertView,它會影響列表視圖的滾動。我認爲這種方式並不合適。我應該在這種情況下做什麼?

+0

只是將您的視圖視爲一個空的RelativeLayout,在getView()中填充了子視圖,那麼您有多少個不同的視圖?答案是:一個 – pskink 2015-04-01 15:34:02

+0

嗯,如果你真的想重用視圖我沒有看到任何其他的解決方案,使「超視圖」,其中包含最大數量的文字視圖,他們是可見性=「走了」,並根據如何切換可見性很多你實際上有 – 2015-04-01 15:35:05

+0

林不知道這是否會比單純誇大每個案件的意見,更有效 – 2015-04-01 15:35:50

回答

0

不幸的是,您無法輕鬆更改實時項目視圖類型的數量。只有在ListView上設置適配器時纔會調用getViewTypeCount()方法。這意味着,如果您要動態更改它,那麼您必須再次撥打setAdapter()。這是一個巨大的性能衝擊,因爲ListView將拋棄所有的再循環視圖,並再次從頭開始重新生成所有內容。

說實話,它看起來像你應該使用ExpandableListView來代替。它允許您顯示組下的項目列表。唯一的區別是這些組被放置在列表的頂部。因此,在圖片左側有A,B,C,D的地方......在ExpandableListView的位置上,它會位於最上面。

ExpandableListView可以很容易地處理您的情況,給定的分組可能有任何可變數量的項目。你提到需要存儲聯繫人列表。我建議看看RolodexArrayAdapterExpandableListView一起使用。它可能有幫助。

+0

對於這種情況下,改變風格,使頂部A,B是好的。但是UE設計特殊的UI效果,比如所有左側(A,B,C,D列)都有通過,那麼就像你說的那樣,ExpandableListView似乎無法處理這個...... – mianlaoshu 2015-04-02 00:40:28

+0

我聽到了雅。那麼可能需要放棄他的UE特效。要麼這樣做,要麼使用ListView並持續刪除/添加新視圖,以動態調整每個列字母中可變數量的數據。考慮到你有成千上萬的聯繫人顯示... ListView選項可能無法正常工作。 – 2015-04-02 00:46:25

相關問題